SCAU 计算高精度加法(C Programming)

Description
由键盘输入两个位数很长的整数(一行一个,最多不超过80位),试计算并输出这两个数的和。

#include <stdio.h>
#include <string.h>

int main()
{
    char m[80],n[80];
    /*后面如果用到strlen,一定要用char,因为strlen只能用于计算字符串的长度*/
    int i,k,len_m,len_n,max;
    int a[80]={0},b[80]={0},c[81]={0};
    scanf("%s",m);
    /*输入字符串的时候,不用for循环(注意区分字符串和int类型数组)
    同时,最好不要用gets(),因为gets()是被抛弃的函数*/    
    len_m=strlen(m);
    for(i=0;i<len_m;i++)
    {
        a[i]=m[len_m-1-i]-'0';/*因为m[i]是字符串,注意要减去‘0’*/
    }
    /*参考课本例6-1,这是非常重要的算法*/
    scanf("%s",n);
    len_n=strlen(n);
    for(i=0;i<len_n;i++)
    {
        b[i]=n[len_n-i-1]-'0';
    }
    if(len_m>len_n) max=len_m;
    else max=len_n;
    /*计算c[i]的长度*/
    k=0;
    for(i=0;i<max;i++)
    {
        c[i]=(a[i]+b[i]+k)%10;
        k=(a[i]+b[i]+k)/10;
        /*如果相加小于10,k=0;否则进一位,所以上面二式都要加上k;*/
    }
    if(k!=0)
    {max++;c[max-1]=k;}
    /*如果最高位要进一位(即最后得出k不等于0),则要再进一位*/
    for(i=max-1;i>=0;i--)
    {
        printf("%d",c[i]);
    }
    /*反向输出,就可以得到高精度加法的计算结果*/
    return 0;
}

一双手 可以不求人 顽强面对
这世界 绝情又刻薄 照样无惧
当 天开眼 暖风吹 云雾会散开
——《一双手》

猜你喜欢

转载自blog.csdn.net/weixin_43389852/article/details/83276251