高精度加法 problem A+B

概要:

1、将数字以字符串形式存入char数组;
2、将数组中元素倒序存入另一个char数组,即将位数小的数放在数组中序号小的,位数大的放序号大的;
3、将每一个char型字符转变成int数字,如'5'-'0'=5,这样就把char数字变成int数字;
4、每一位之间进行加法运算,注意进位加一;
5、输出时注意最高位数是否有进一,若最高位有0不要输出;

重点

步骤2、3

将数组中元素倒序存入另一个char数组

将每一个char型字符转变成int数字

for (i=len1-1;i>=0;i--){
        s1[(len1-1)-i]=a[i]-'0';
    }
    for (i=len2-1;i>=0;i--){
        s2[(len2-1)-i]=b[i]-'0';
    }

步骤4

每一位之间进行加法运算

for (i=0;i<max;i++){
        c[i+1]+=(c[i]+s1[i]+s2[i])/10;
        c[i]=(c[i]+s1[i]+s2[i])%10;
        }

步骤5

输出时注意最高位数是否有进一,若最高位有0不要输出

if (c[i]!=0){
        for (k=i;k>=0;k--){
            printf("%d",c[k]);
        }
    }
    else {
        for (k=i-1;k>=0;k--){
            printf("%d",c[k]);
        }
    }

完整代码

#include<stdio.h>
#include<string.h>
char a[10007],b[10007];
int s1[10007],s2[10007],c[10007];
int main(){
    scanf("%s",a);
    scanf("%s",b);
    int i; 
    char temp[10007];
    int len1=strlen(a),len2=strlen(b);
    int max=len1>len2?len1:len2;
    for (i=len1-1;i>=0;i--){
        s1[(len1-1)-i]=a[i]-'0';
    }
    for (i=len2-1;i>=0;i--){
        s2[(len2-1)-i]=b[i]-'0';
    }
    for (i=0;i<max;i++){
        c[i+1]+=(c[i]+s1[i]+s2[i])/10;
        c[i]=(c[i]+s1[i]+s2[i])%10;
        }
    int k;
    if (c[i]!=0){
        for (k=i;k>=0;k--){
            printf("%d",c[k]);
        }
    }
    else {
        for (k=i-1;k>=0;k--){
            printf("%d",c[k]);
        }
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/xiao-qingjiang/p/12449096.html
今日推荐