对于比较大的数据,特别大(long long数据类型已经溢出的时候)此时使用数组计算器是个较好的选择,它把一个非常大的数据的每一位保存在数组的每一个元素中,这样一来,就不会存在数组越界的问题了。
source
#include <stdio.h>
#include <string.h>
char s1[20];
char s2[20];
int a[20];
int b[20];
int c[20];
int main ()
{
int i;
char ch;
while((ch = getchar())!=EOF)
{
int t;
scanf("%s%s",s1,s2);
int ls1 = strlen(s1), ls2 = strlen(s2);
for(i = ls1; i > 0; i--)
{
s1[i] = s1[i-1];
}
for(i = ls2; i > 0; i--)
{
s2[i] = s2[i-1];
}
for(i = 1; i <= ls1; i++)
{
a[i] = s1[i] - 48;
}
for(i = 1; i <= ls2; i++)
{
b[i] = s2[i] - 48;
}
int cnt = ls1 > ls2 ? ls1 : ls2;
int flag = 0,x=1;
for(cnt; cnt >= 0; cnt--)
{
if(x == 1)
{
if(a[cnt] + b[cnt] >= 10)
{
flag = 1;
}
c[cnt] = (a[cnt] + b[cnt])%10;
x = 0;
continue;
}
c[cnt] = (a[cnt] + b[cnt])%10 + flag;
if(a[cnt] + b[cnt] >= 10)
{
flag = 1;
}
if(c[cnt]>=10)
{
c[cnt] %= 10;
flag = 1;
}
}
cnt = ls1 > ls2 ? ls1 : ls2;
for(i = 0; i <= cnt; i++)
{
if(c[0] == 0)
{
c[0] = 1;
continue;
}
else printf("%d",c[i]);
}
printf("\n");
memset(s1, 0, sizeof(char)*20);
memset(s2, 0, sizeof(char)*20);
memset(a, 0, sizeof(a)*20);
memset(b, 0, sizeof(b)*20);
memset(c, 0, sizeof(c)*20);
}
return 0;
}
希望有人能赐教,简化此代码