杭電oj 1002、簡単な理解、複雑な解法
1966 ワード
杭電ojという問題の解法は文字配列に数字を格納して演算するとともに、数値進位の問題に関連し、以下はコードの参考を提供する.
出力のフォーマットに注意してください.
実は複雑でも複雑でもなく、似たようなところもあります.
#include
#include
int main()
{
char a[1000],b[1000];
int sum[10000]={0};
int c,d,e,f,g,i,n,s;
scanf("%d",&n);
f=48;
s=1;
c=n;
while(n--)
{
scanf("%s",a+1);
scanf("%s",b+1);
printf("Case %d:
",s);
printf("%s + %s = ",a+1,b+1);
d=strlen(a+1);
e=strlen(b+1);
for(i=1;i<=d;i++)
a[i]=a[i]-48;
for(i=1;i<=e;i++)
b[i]=b[i]-48;
if(d==e) //
{
for(i=1;i<=d;i++)
{
if(a[i]+b[i]>=10&&i>=2)
{
sum[i-2]=sum[i-2]+1;// sum , 10+1
sum[i-1]=(a[i]+b[i]-10);// 10, 15-1=5
}
else
sum[i-1]=a[i]+b[i];
}
}
else if(d>e) //
{
for(i=1;i<=d-e;i++)
sum[i]=a[i];
f=1;
for(i=d-e+1;i<=d;i++)
{
if(a[i]+b[f]>=10)
{
sum[i-1]=sum[i-1]+1;
sum[i]=a[i]+b[f]-10;
if(sum[i-1]>=10)
{
for(g=i-1;g>=1;g--)// 10
{
if(sum[g]>=10)
{
sum[g-1]=sum[g-1]+1;
sum[g]=sum[g]-10;
}
}
}
}
else
sum[i]=a[i]+b[f];
f++;
}
}
else if(d=10)
{
sum[i-1]=sum[i-1]+1;
sum[i]=a[f]+b[i]-10;
if(sum[i-1]>=10)
{
for(g=i-1;g>=1;g--)
{
if(sum[g]>=10)
{
sum[g-1]=sum[g-1]+1;
sum[g]=sum[g]-10;
}
}
}
}
else
sum[i]=a[f]+b[i];
f++;
}
}
if(d==e)
{
for(i=0;ie)
{
if(sum[0]==0)
{
for(i=1;i<=d;i++)
printf("%d",sum[i]);
}
else
{
for(i=0;i<=d;i++)
printf("%d",sum[i]);
sum[0]=0;
}
s++;
}
if(d
出力のフォーマットに注意してください.
実は複雑でも複雑でもなく、似たようなところもあります.