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

交上去一直wrong answer
我的思路是先在前面補0在相加
#include<stdio.h>
#include<string.h>
int main()
{
int n; scanf("%d", &n);int k;
for(k=1;k<=n;k++)
{
char a[1500], b[1500]; char c[1500];int i;int p=0;
scanf("%s %s", a, b);
printf("Case %d:\n",k);
printf("%s + %s = ",a,b);
int a1=strlen(a),b1=strlen(b);
if(strlen(a)>strlen(b))
{
for( i=0;i<a1-b1;i++)
{c[i]='0';}
for(i=b1-1;i>=0;i--)c[i+a1-b1]=b[i];
for(i=0;i<=b1-1;i++)c[i]='0';
int d[1500],jw=0;//jw代表進位
for(i=a1-1;i>=0;i--)
{d[i]=(a[i]-'0'+c[i]-'0'+jw)%10;jw=(a[i]-'0'+c[i]-'0'+jw)/10;
}
if(jw==1) p=1;//p表示最前面一位是否要進位
if(p)printf("%d",p);//如果最前面一位要進位就先輸出1
for(i=0;i<=a1-1;i++)
printf("%d",d[i]);
printf("\n");}
else if(strlen(a)<strlen(b))
{
for( i=0;i<b1-a1;i++)
{c[i]='0';}
for(i=a1-1;i>=0;i--)c[i+b1-a1]=a[i];
for(i=0;i<=a1-1;i++)c[i]='0';
int d[1500],jw=0;
for(i=b1-1;i>=0;i--)
{d[i]=(b[i]-'0'+c[i]-'0'+jw)%10;jw=(b[i]-'0'+c[i]-'0'+jw)/10;
}
if(jw==1) p=1;
if(p)printf("%d",p);
for(i=0;i<=b1-1;i++)
printf("%d",d[i]);
printf("\n");}
else { //兩個數位數相同時
int d[1500],jw=0;
for(i=a1-1;i>=0;i--)
{
d[i]=(a[i]-'0'+b[i]-'0'+jw)%10;
jw=(a[i]-'0'+b[i]-'0'+jw)/10;
}
if(jw==1) p=1;
if(p)printf("%d",p);
for(i=0;i<=b1-1;i++)
printf("%d",d[i]);
printf("\n");
}
if(k!=n)printf("\n");
}
}
uj5u.com熱心網友回復:
考慮負數嘛?uj5u.com熱心網友回復:
不考慮,只考慮正整數轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/146266.html
標籤:新手樂園
