您的位置:首页 > 其它

高精度算法-大数加法

2013-12-04 00:34 316 查看
问题 C: A+B Problem (6)

时间限制: 1 Sec 内存限制: 128 MB

提交: 486 解决: 253

[提交][状态][讨论版]

题目描述

很长整数是指无法用long long型数存储的数,因此需要用字符串数组来存储两个被加数,相加的结果也保存于字符数组中,假如被加数长度不超过十进制100位,请编程实现该加法程序并将相加结果输出。

输入

两个很长的整数

输出

很长整数加法结果

样例输入

35555555555555555555

55555555555555555555

样例输出

91111111111111111110

我的原代码是这样的:

#include<stdio.h>
#include<string.h>
void fun(char a[],char b[],char c[])
{
int i,j,jinw=0,ci=0,x,y,z,k;
char tmp;
i=strlen(a)-1;
j=strlen(b)-1;
while(i>=0||j>=0) //检索直到两数组都被加完
{
if(i<0) //当a数组被加完时
x=0;
else
x=a[i]-'0';
if(j<0) //当b数组被加完时
y=0;
else
y=b[j]-'0';

z=x+y;

if(jinw) //如果有进位
z++;
if(z>9) //考虑当前数累加是否会导致下次计算进位
{
jinw=1;
z%=10;
}
else
jinw=0;
c[ci++]=z+'0';
i--;
j--;
}
if(jinw) //考虑最后一位是否还有进位
c[ci++]='1';
c[ci]='\0'; //为C数组添加终止符
k=strlen(c);
for(i=0;i<k/2;i++)
{
tmp=c[i];c[i]=c[k-i-1];c[k-i-1]=tmp;
}
printf("%s\n",c);
}
int main()
{
char a[600],b[600],c[600];
while(scanf("%s%s",a,b)!=EOF)
{
fun(a,b,c);
}
return 0;
}


这样写的话我试着测试了几个数据,只要a数组长度和b数组长度相同,不会有什么问题

但是当a数组长度和b数组长度不同时,便出现了问题

比如会出现奇怪的符号

@蚂蚁学姐 求解啊~!!!

2013/12/15

已解决-
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: