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 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器