http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2525
比加法复杂,要考虑三种情况,n1>n2; n1<n2; n1=n2;
#include<stdio.h>
#include<string.h>
int f(char st1[],char st2[])
{
if(strlen(st1)>strlen(st2))
return 1;
else if(strlen(st1)<strlen(st2))
return 0;
else
{
for(int i=0;st1[i]!='\0';i++)
{
if(st1[i]==st2[i]) continue;
else if (st1[i]>st2[i]) return 1;
else return 0;
}
}
return 1;
}
int main ()
{
char st1[100],st2[100];
int n1,n2,i,j,m,a[100],b[100],c[100];
while(~scanf("%s %s",st1,st2))
{
m=1;
memset(a,0,sizeof(a)); //初始化
memset(b,0,sizeof(b)); //初始化
n1=strlen(st1)-1;
n2=strlen(st2)-1;
for(i=0;i<=n1;i++)
a[i]=st1[n1-i]-'0';
for(i=0;i<=n2;i++)
b[i]=st2[n2-i]-'0';
if(f(st1,st2))
{
for(i=0;i<=n1;i++){
if(a[i]>=b[i])
c[i]=a[i]-b[i];
else if(a[i]<b[i])
{c[i]=a[i]+10-b[i];a[i+1]--;}
}
for(j=n1;j>=0;j--) //排除前导0;
if(c[j]) break;
for(i=j;i>=0;i--)
{
printf("%d",c[i]);
m=0;
}
}
else
{
for(i=0;i<=n2;i++)
{
if(b[i]>=a[i])
c[i]=b[i]-a[i];
else if (b[i]<a[i])
{c[i]=b[i]+10-a[i];b[i+1]--;}
}
printf("-");
for(j=n2;j>=0;j--) //排除前导0;
if(c[j]) break;
for(i=j;i>=0;i--)
{
printf("%d",c[i]);
m=0;
}
}
if(m)
printf("0\n");
else printf("\n");
}
return 0;
}
欢迎留言