美文网首页
【C/C++】超长正整数的加法

【C/C++】超长正整数的加法

作者: 仍有不归期 | 来源:发表于2020-06-05 12:18 被阅读0次

    这些题目都是大一刚入学时学习C语言的课后作业,在OJ上看到还保留着,就都整理下发出来吧......(只有题和代码)

    【问题描述】
    编写程序实现两个超长正整数(每个最长80位数字)的加法运算。

    【输入形式】

    从键盘读入两个整数,要考虑输入高位可能为0的情况(如00083)。

    1. 第一行是超长正整数A;
    2. 第二行是超长正整数B;

    【输出形式】
    输出只有一行,是两个长整数的运算结果,从高到低依次输出各位数字。各位数字紧密输出。
    算法提示:

    1.用字符串输入两个超长整数,分别存放在两个字符串中,每一位对应一个字符串中的字符。
    2.以较短的超长整数为基准,从低位到高位,对应位转换成数字后相加,再加上前一位相加的进位,得到的和模上10再转换为字符即为当前位,得到的和整除10即为当前位的进位。将计算得到的每一位保存到结果字符数组。
    3.将较长字符串的剩余位加上最后一个进位移到结构数组后面。
    4.将结果数组反序输出(去掉高位多余的0)。
    【输入样例】

    134098703578230056
    234098

    【输出样例】
    134098703578464154

    【样例说明】
    进行两个正整数加法运算,134098703578230056 + 234098 = 134098703578464154。

    【评分标准】
    完全正确得20分,每个测试点4分,提交程序文件名为add.c。


    【代码】

    //大数加法 2018/12/3/11:44
    //写的一堆垃圾。。。以后再改
    #include<stdio.h>
    #include<string.h>
    
    int main()
    {
        char a[81]={};
        char b[81]={};
        scanf("%s",a);
        getchar();
        
        scanf("%s",b);
        getchar();
        
        int j;
        for(j=0;j<81;j++)
        {
            if(a[j]!='0')
            {
                break;
            }
        }
        int k;
        for(k=0;k<81;k++)
        {
            if(b[k]!='0')
            {
                break;
            }
        }
        char c[81];
        char d[81];
        int i;
        for(i=0;i<81;i++)
        {
            c[i]='0';
            d[i]='0';
        }
        
        
        for(i=0;i<strlen(a);i++)
        {
            c[i]=a[strlen(a)-1-i];
        }
        for(i=0;i<strlen(b);i++)
        {
            d[i]=b[strlen(b)-1-i];
        }
        int final[81]={0};
        
        for(i=0;i<81;i++)
        {
            if((int)c[i]+(int)d[i]+final[i]-96<10)
            {
                final[i]+=(int)c[i]+(int)d[i]-96;
            }
            else
            {
                final[i]+=(int)c[i]+(int)d[i]-58-48;
                final[i+1]=1;
            }
        }
        int save;
        for(i=80;i>=0;i--)
        {
            if(final[i] >0&&final[i]<10 )
            {
                save=i;
                break;
            }
            
        }
        int m;
        if(strlen(a)-j>strlen(b)-k)
        {
            m=strlen(a)-j;
        }
        else
        {
            m=strlen(b)-k;
        }
        if(final[m]!=0)m+=1;
        for(i=m-1;i>=0;i--)
        {
            printf("%d",final[i]);
        }
        
        return 0;
    }
    
    
    
    PS:由于当时刚学C语言,很多代码显得很稚嫩...需要的人见谅...

    相关文章

      网友评论

          本文标题:【C/C++】超长正整数的加法

          本文链接:https://www.haomeiwen.com/subject/ezvpzhtx.html