HDU 1002 A + B Problem II

纯粹的大数问题

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=1002

感觉代码好龊 QAQ  但是写的应该还是比较好理解的...(面壁...

#include <stdio.h>
#include <string.h>
int main()
{
char s1[1001], s2[1001];
int s[1005];
int i, q, w, n, h;
int z = 0;
scanf("%d",&n);
h = n;
while( n-- )
{
z++;
scanf("%s%s",s1,s2); //字符串输入
q = strlen(s1);
w = strlen(s2);
if( q > w )
{
for( i = q-1; i >= q-w; i--)
s[i] = (s1[i] - '0') + (s2[i-q+w] - '0');//数位对齐相加 (将字符转换成数字)
for( i = q-w-1; i >= 0; i--)
s[i] = s1[i] - '0';
for( i = q-1; i > 0; i--)//最高位不需要进位处理 可直接输出
{
if(s[i]/10 != 0)
{
s[i-1] = s[i-1] + (s[i]/10); //进位处理
s[i] = s[i]%10;
}
}
printf("Case %d:\n",z);
printf("%s + %s = ",s1,s2);
for( i = 0; i < q; i++)
printf("%d",s[i]);
}
else if( q == w)
{
for( i = w-1; i >= 0; i--)
s[i] = (s1[i] - '0') + (s2[i-q+w] - '0');
for( i = q-1; i > 0; i--)
{
if(s[i]/10 != 0)
{
s[i-1] = s[i-1] + (s[i]/10);
s[i] = s[i]%10;
}
}
printf("Case %d:\n",z);
printf("%s + %s = ",s1,s2);
for( i = 0; i < q; i++)
printf("%d",s[i]);
}
else
{
for( i = w-1; i >= w-q; i--)
s[i] = (s1[i-w+q] - '0') + (s2[i] - '0');
for( i = w-q-1; i >= 0; i--)
s[i] = s2[i] - '0';
for( i = w-1; i > 0; i--)
{
if(s[i]/10 != 0)
{
s[i-1] = s[i-1] + (s[i]/10);
s[i] = s[i]%10;
}
}
printf("Case %d:\n",z);
printf("%s + %s = ",s1,s2);
for( i = 0; i < w; i++)
printf("%d",s[i]);
}
if(z != h)
printf("\n");
printf("\n");
}
return 0;
}

 

posted @ 2012-03-31 17:23  双生_浅羽  阅读(116)  评论(0编辑  收藏  举报