杭電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

出力のフォーマットに注意してください.
実は複雑でも複雑でもなく、似たようなところもあります.