大数加法
前言(本人学习算法和c语言不久,只是发一点自己学习的结果,仅供参考)
大数加法应该算是高精度题目里最简单的题目了,所以本菜鸡也敢发一点自己的心得了,代码应该能确定是正确的(我测试了几个比较大型的OJ)
大数加法的思路就是用数组来存储要来相加的两组大型数值型数据,首先是定义两个字符型数组,将两组数据用字符串输入到数组中,再将两组数据从头到尾按位转换,并将之后的值置0,并使用一个整形数组按位将值加到数组中,并将其模10,加入到整型数组的下一位,加完后,从整型数组的末尾开始循环找到不为的第一位跳出循环,并从那位开始倒输。
代码如下:
#include <stdio.h>
#include <string.h>
int main()
{
char a[1010],b[1010],g;
int c[1011],e,f,i,s,h;
scanf("%d",&s);
for(h=s;h>0;h--)
{
memset(a,0,sizeof(c));
scanf("%s%s",a,b);
e=strlen(a);
f=strlen(b);
printf("Case %d:\n",s-h+1);
printf("%s + %s =",a,b);
for(i=e;i<1010;i++)
a[i]='0';
for(i=f;i<1010;i++)
b[i]='0';
for(i=0;i<e;i++)
{
g=a[i];
a[i]=a[e-1];
a[e-1]=g;
e--;
}
for(i=0;i<f;i++)
{
g=b[i];
b[i]=b[f-1];
b[f-1]=g;
f--;
}
for(i=0;i<=1010;i++)
{
c[i]=c[i]+(a[i]-'0')+(b[i]-'0');
c[i+1]=c[i]/10;
c[i]%=10;
}
for(i=1000;i>=0;i--)
if(c[i]!=0)
break;
if(i<0)
printf("%d",c[0]);
for(e=i;e>=0;e--)
printf("%d",c[e]);
printf("\n");
}
return 0;
}