http://acm.hdu.edu.cn/showproblem.php?pid=1002
大数运算,用数组存数据,参考刘汝佳的《算法竞赛入门经典》里面写的,顺便写模板。
还可以用这个模板来写减法、乘法。
除法运算暂时不清楚如果有小数怎么处理。。。
AC代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define MAX 10000
struct node
{
int len,s[MAX];
node()
{
memset(s,0,sizeof(s));
len = 0;
}
};
int main()
{
int t,k,n1,n2;
int i;
char s1[MAX],s2[MAX],p;
scanf("%d",&t);
k = 0;
while(t--)
{
k++;
node a,b;
a.len = b.len = 0;
scanf("%s%s",&s1,&s2);
n1 = strlen(s1);
n2 = strlen(s2);
for(i = n1-1; i >= 0; i--)
{
a.s[a.len] = s1[i]-'0';
a.len++;
}
for(i = n2-1; i>=0; i--)
{
b.s[b.len] = s2[i]-'0';
b.len++;
}
node sum;
int len,add = 0;
len = max(n1,n2);
for(i = 0; i < len; i++)
{
add = a.s[i]+b.s[i]+add;
sum.s[i] = add%10;
add/=10;
}
sum.len = i;
if(add>0)
{
sum.s[sum.len] = add;
add = 0;
sum.len++;
}
printf("Case %d:\n",k);
printf("%d",a.s[a.len-1]);
for(i = a.len-2; i >= 0; i--)
{
printf("%d",a.s[i]);
}
printf(" + ");
printf("%d",b.s[b.len-1]);
for(i = b.len-2; i >= 0; i--)
{
printf("%d",b.s[i]);
}
printf(" = ");
printf("%d",sum.s[sum.len-1]);
for(i = sum.len-2; i >= 0; i--)
{
printf("%d",sum.s[i]);
}
printf("\n");
if(t!=0)
{
printf("\n");
}
}
return 0;
}