大数加法错了

fx397993401 2009-07-12 05:15:20


#include<stdio.h>
#include<string.h>
void fun( int d[],int n)
{
if(d[n]&&n)
{
printf("%d",d[n]);
fun (d,n-1);
}
}

int main()
{
char str1[1000] = {NULL};
char str2[1000] = {NULL};
int d1[1000] = {0};
int d2[1000] = {0};
int i = 0,j = 0,num = 0;
while(scanf("%s",str1)&&scanf("%s",str2)&&strcmp(str1,"0")&&strcmp(str2,"0"))
{
//i = strlen(str1)>strlen(str2)?strlen(str1):strlen(str2) + 1;
str1 = strrev(str1), str2 = strrev(str2);//字符串 反转
memset(d1,0,1000),memset(d2,0,1000);// 重置数组
for(i = 0;str1[i]!='\0';i++)// 将字符串 转为 数组
d1[i] = str1[i] - '0';
for(i = 0;str2[i]!='\0';i++)
d2[i] = str2[i] - '0';
for(i = 0;d1[i]&&d2[i];i++)
{
d1[i] = (d1[i]+d2[i])%10 + num;
num = (d1[i]+d2[i])/10;
}
if( num)
{d1[i] = num;fun(d1,i);}
else
fun(d1,i-1);


}
return 0;
}
...全文
44 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
fx397993401 2009-07-14
  • 打赏
  • 举报
回复

#include<stdio.h>
#include<string.h>
void fun( int d[],int n)
{
if(d[n]&&n+1)
{
printf("%d",d[n]);
fun (d,n-1);
}
}

int main()
{
char str1[1000] = {NULL};
char str2[1000] = {NULL};
int d1[1000] = {0};
int d2[1000] = {0};
int i = 0,j = 0,num = 0,len = 0,t = 0;
while(scanf("%s",str1)&&scanf("%s",str2)&&strcmp(str1,"0")&&strcmp(str2,"0"))
{
len = strlen(str1)>strlen(str2)?strlen(str1):strlen(str2) ;
strrev(str1), strrev(str2);//字符串 反转
memset(d1,0,1000),memset(d2,0,1000);// 重置数组
for(i = 0;str1[i]!='\0';i++)// 将字符串 转为 数组
d1[i] = str1[i] - '0';
for(i = 0;str2[i]!='\0';i++)
d2[i] = str2[i] - '0';
for(i = 0;i< len ;i++)
{
t = d1[i]+d2[i];
d1[i] = t%10 + num;
num = t/10;
}
// for(i = 0;i < len ; i ++)
// printf("%d ",d1[i]);

if(num)
{
d1[i] = num;
for(i = len ;i >= 0; i--)
printf("%d",d1[i]);
printf("\n");
}
else
{
for(i = len-1 ;i >= 0; i--)// 倒叙输出 ···但是没有达到要求
printf("%d",d1[i]);
printf("\n");
}
}
return 0;
}

谢谢 magipan
fx397993401 2009-07-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 magipan 的回复:]
for(i = 0;d1[i]&&d2[i];i++)
{
d1[i] = (d1[i]+d2[i])%10 + num;
num = (d1[i]+d2[i])/10;
}
这一块算法有问题吧,num使用的d1[i]应该是未改变之前的d1[i]
改成 int temp = d1[i]+d2[i];
d1[i] = (temp + num)%10;
num = temp/10;

if(d[n]&&n)
{
printf("%d",d[n]);
fun (d,n-1);
}
这样不能输出d[0],把if…
[/Quote]
d1[i]&&d2[i] 这里错了 逻辑错误 谢谢 但是问题还是在
dfkjsdhfks 2009-07-13
  • 打赏
  • 举报
回复
直接将两个数组内的值在相应位相加,然后将所得数组从第一位到最后一位扫描一次,用一个while,如存在b数组内,while(b[i]>9),然后在循环内减十并进位直到小于10为止。用这种方法作大数相乘都可以。至于长度问题,取两个数组里最长的,全部初始化为0,对加法不造成任何影响(效率低了一点而已)。
将d1[i] = (d1[i]+d2[i])%10 + num;改为d1[i]=(d1[i]+d2[i]+num)%10试试,如果d1[i]=5,d2[i]=4,则d1[i]+d2[i]=9;9%10=9;如果刚好进了一位,则d1[i]=9+num=9+1=10;没上机测试过,以前写过但觉得简单没去记,只作个建议。哈哈...
magipan 2009-07-13
  • 打赏
  • 举报
回复
好像只是len的值不是很合适
fx397993401 2009-07-13
  • 打赏
  • 举报
回复

#include<stdio.h>
#include<string.h>
void fun( int d[],int n)
{
if(d[n]&&n+1)
{
printf("%d",d[n]);
fun (d,n-1);
}
}

int main()
{
char str1[1000] = {NULL};
char str2[1000] = {NULL};
int d1[1000] = {0};
int d2[1000] = {0};
int i = 0,j = 0,num = 0,len = 0,t = 0;
while(scanf("%s",str1)&&scanf("%s",str2)&&strcmp(str1,"0")&&strcmp(str2,"0"))
{
len = strlen(str1)>strlen(str2)?strlen(str1):strlen(str2) + 1;
strrev(str1), strrev(str2);//字符串 反转
memset(d1,0,1000),memset(d2,0,1000);// 重置数组
for(i = 0;str1[i]!='\0';i++)// 将字符串 转为 数组
d1[i] = str1[i] - '0';
for(i = 0;str2[i]!='\0';i++)
d2[i] = str2[i] - '0';
for(i = 0;i< len ;i++)
{
t = d1[i]+d2[i];
d1[i] = t%10 + num;
num = t/10;
}
for(i = 0;i < len ; i ++)
printf("%d ",d1[i]);

if(num)
{
d1[i] = num;
for(i = len +1;i >= 0; i--)
printf("%d",d1[i]);
printf("\n");
}
else
{
for(i = len ;i >= 0; i--)// 倒叙输出 ···但是没有达到要求
printf("%d",d1[i]);
printf("\n");
}
}
return 0;
}
magipan 2009-07-13
  • 打赏
  • 举报
回复
啥问题说呗
magipan 2009-07-12
  • 打赏
  • 举报
回复
for(i = 0;d1[i]&&d2[i];i++)
{
d1[i] = (d1[i]+d2[i])%10 + num;
num = (d1[i]+d2[i])/10;
}
这一块算法有问题吧,num使用的d1[i]应该是未改变之前的d1[i]
改成 int temp = d1[i]+d2[i];
d1[i] = (temp + num)%10;
num = temp/10;

if(d[n]&&n)
{
printf("%d",d[n]);
fun (d,n-1);
}
这样不能输出d[0],把if的条件改成d[n]&&(n+1)
PS:没考虑两个数长度不一样的情况?
liao05050075 2009-07-12
  • 打赏
  • 举报
回复
反转一个字符串s,只要strrev(s)就行了,不用s=strrev(s);
fx397993401 2009-07-12
  • 打赏
  • 举报
回复
输入两个数字的字符串 将其的和输出 这个数字的字符串 可能很长 用普通的加法会溢出
Nio96 2009-07-12
  • 打赏
  • 举报
回复
??

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧