m0_73292724 2022-08-18 16:36 采纳率: 91.7%
浏览 36
已结题

请教高精度运算,样例通过,代码不行,找不到问题(语言-c语言)

问题遇到的现象和发生背景

样例通过,在noi上不通过,请教帮忙
10:大整数加法
描述
求两个不超过200位的非负整数的和。
输入
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
输出
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入
22222222222222222222
33333333333333333333
样例输出
55555555555555555555

我的解答思路和尝试过的方法

#include <stdio.h>
#include <string.h>
int main()
{
char a[200],b[200];
int c[200],d[200],sum[201];
int i;
for(i=0;i<200;i++){
a[i]=b[i]=0;
sum[i]=c[i]=d[i]=0;
}
sum[200]=0;//初始化,同时防止2个不超过200位数相加得201位数
scanf("%s%s",a,b);
int la=strlen(a),lb=strlen(b);
for(i=la-1;i>=0;i--){
c[la-i-1]=a[i]-'0';
}
for(i=lb-1;i>=0;i--){
d[lb-i-1]=b[i]-'0';
}
//将字符串数组转化为整数数组从个位开始
for(i=0;i<200;i++){
int j=c[i]+d[i];
sum[i]=j%10;
sum[i+1]+=j/10;
}//相加,已考虑到201位数
i=200;
while(sum[i]==0){
if(i==0){
sum[i]=0;
break;
}else{
i--;
}
}//除去前面多余的0;确保结果全是0时保留一位0
for(;i>=0;i--){
printf("%d",sum[i]);
}
return 0;
}

  • 写回答

2条回答 默认 最新

  • 快乐鹦鹉 2022-08-18 16:40
    关注

    sum[i]=j%10;应该改为sum[i]+=j%10;有可能前面已经进位了啊
    并且,如果sum[i] += j%10后,sum[i]的值也可能大于等于10,因此还要进行求余处理,以及进位处理

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月26日
  • 已采纳回答 8月18日
  • 创建了问题 8月18日

悬赏问题

  • ¥15 PADS Logic 原理图
  • ¥15 PADS Logic 图标
  • ¥15 电脑和power bi环境都是英文如何将日期层次结构转换成英文
  • ¥20 气象站点数据求取中~
  • ¥15 如何获取APP内弹出的网址链接
  • ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了