0
点赞
收藏
分享

微信扫一扫

【C语言】高精度加法改进版

老榆 2022-05-09 阅读 126

1.数字长度记录在数组0号元素
2.结果存储在a数组中
3.不输出前导0,做标记
代码实现

//高精度加法改进 
#include<stdio.h> 
#include<string.h>

#define N 1000

//判断字符串是否为数字串,是返回1否返回0 
int allDigit(char *s) {
    while(*s) {
        if(!(*s>='0'&&*s<='9'))
            return 0;
        s++;
    }
    return 1;
}

//将数字串s拆分为单个数字保存在整型数组,从1号开始 
//整型数组0号元素记录数字长度 
void input(char s[],int p[]){
    int len=strlen(s),i;
    for(i=0;i<len;i++)
        p[len-i]=s[i]-'0';
    p[0]=len;
} 

//将a+b的结果保存在a 
void add(int a[],int b[]) {
    int i,temp;
    int len=a[0]>b[0] ?a[0]:b[0];

    for(i=1;i<=len;i++){
        //c[i]+=a[i]+b[i];
        //a[i]+=a[i]+b[i];  错误! 
        a[i]=a[i]+b[i];     
        if(a[i]>=10){
            a[i+1]+=a[i]/10;
            a[i]=a[i]%10;           
        }
    }

    if(a[len+1]!=0)
        a[0]++; 
}

int main(){
    char s[N];
    int a[N]={0},b[N]={0},c[N]={0};
    int i;

    printf("请输入数字串1:\n");
    do{
        gets(s);
        if(allDigit(s))
            break;
        printf("请输入数字串1:\n");
    }while(1);  
    input(s,a);

    printf("请输入数字串2:\n");
    do{
        gets(s);
        if(allDigit(s))
            break;
        printf("请输入数字串2:\n");
    }while(1);      
    input(s,b);

    add(a,b);

    int flag=1;//flag=1时遇到的0是前导0 
    for(i=a[0];i>=1;i--){
        if(a[i]==0&&flag&&i!=1) //结果可能为0,所以i!=1 
            continue;
        else
            flag=0; 
        printf("%d",a[i]);
    }

    printf("\n");

    return 0; 
}
举报

相关推荐

0 条评论