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

请教高精度运算,样例通过,代码不行,找不到问题(语言-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 wamp3.3.5安装完成后图标正常显示绿色,鼠标左右键点击图标均无反应。求解决方法。
  • ¥15 鼠标点击的这条记录了什么?
  • ¥15 在写pid调速的程序时,电机始终维持最大速度
  • ¥15 请问如何查看手机root记录?
  • ¥15 商城小程序订单号重复
  • ¥15 学校优化算法sbo和蚁群算法怎么结合
  • ¥21 matlab怎么求时域信号的二阶导数
  • ¥15 判断两个表是否完全相同
  • ¥15 java map类型数据格式,如何快速通过前缀匹配元素
  • ¥15 stc12c5a60s2、QMC5883L、LCD1602组合测量磁场所需程序