Jarvan_Kay 2020-04-18 11:21 采纳率: 100%
浏览 1244
已采纳

利用数组两个15位数相加

两个15位的正整数相加(最多用二维数组,后面的还没学。。。)

【问题描述】

能使用数组的方式对两个15位的正整数相加,并将结果显示出来。
提示:请将每一位数存放在一个数组元素中,然后逐位相加。

【输入形式】

输入两个15位的正整数,每个整数占一行。

【输出形式】

结果显示在下一行

【样例输入】

123456789012345

234567890123456

【样例输出】

358024679135

  • 写回答

1条回答 默认 最新

  • threenewbee 2020-04-18 11:27
    关注
    #include <stdio.h>
    #include <string.h>
    
    inline int addchar(char c1,char c2,int f,char &s){//1位加法,f表示进位
        int t=c1+c2+f;
        if(t<106){
            s=(char)(t-48);
            return 0;
        }else{
            s=(char)(t-58);
            return 1;
        }
    }
    void bignumadd(const char* num1,const char* num2,char* sum){//大数相加
        size_t len1=strlen(num1),len2=strlen(num2),i=0;//得到输入字符串长度
        int f=0;//用于保存进位
        if(len1>len2){//如果第一个字符串长
            for(;i<len2;++i){//len2比较小,先遍历完
                f=addchar(num1[len1-i-1],num2[len2-i-1],f,sum[i]);
            }
            for(;i<len1;++i){//剩下部分
                f=addchar(num1[len1-i-1],'0',f,sum[i]);//第一个字符串多出来的直接和0加
            }
        }else{//如果第二个字符串长
            for(;i<len1;++i){//len1比较小,先遍历完
                f=addchar(num1[len1-i-1],num2[len2-i-1],f,sum[i]);
            }
            for(;i<len2;++i){//剩下部分
                f=addchar('0',num2[len2-i-1],f,sum[i]);//第二个字符串多出来的直接和0加
            }
        }
        //别忘记最高位还可能会进位
        for(;f>0;++i){
            f=addchar('0','0',f,sum[i]);
        }
    }
    void showsum(const char* s){//显示计算结果
        size_t len=strlen(s);
        for(int i=len-1;i>-1;--i){//从最后一位开始逆序输出
            putchar(s[i]);
        }
    }
    int main() {
        const char* num1="123456789012345";
        const char* num2="234567890123456";
        char s[100]={0};//分配100字节的栈空间存放结果
        //printf(" %s+%s\n=",num1,num2);
        bignumadd(num1,num2,s);
        showsum(s);
        //getchar();
        return 0;
    }
    
    

    358024679135801

    你的结果明显不对,怎么加出来还变小了。正确结果是358024679135801

    问题解决的话,请点采纳

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 11月26日

悬赏问题

  • ¥15 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号