#include<stdio.h> #include<string.h> #include<stdlib.h> int len1,len2; int c[111]; int my_compare(int *a,int *b) { int flag;int i; int max=(len1>=len2?len1:len2); /* 实际上还可以先判断长度,若长度不同,则必然一大一小 长度相同时才用到下面的for循环 */ /* if(len1>len2) return 1; if(len1<len2) return -1; 这样输入00 1的话,就会错误 */ //else { for(i=max;i>=1;i--)//因为ab是倒着存储的,a[0]、b[0]未使用 if(a[i]>b[i]) { flag=1; break; } else if(a[i]<b[i]) { flag=-1; break; } else continue; } if(0==i) flag=0; return flag; } void plus(int a[],int b[]) { int i; int len=(len1>=len2?len1:len2); memset(c,0,sizeof(c)); for(i=1;i<=len;i++) { c[i]=a[i]+b[i]; if(c[i]>=10) { c[i+1]++; c[i]=c[i]%10; } } if(c[len+1]!=0) len++; for(i=len;i>=1;i--) printf("%d",c[i]); printf("\n"); } void minus(int a[],int b[])//数组a的值大于数组b的 { int i; int len=(len1>=len2?len1:len2); memset(c,0,sizeof(c)); for(i=1;i<=len;i++) { c[i]=a[i]-b[i]; if(c[i]<0) { a[i+1]--; /* if(a[i+1]<0) { a[i+1]+=10; a[i+2]--; } */ c[i]=c[i]+10; } } while(c[len]==0) len--; for(i=len;i>=1;i--) printf("%d",c[i]); printf("\n"); } int main() { int i,j; int signal1,signal2; char str1[110],str2[110]; int a[110],b[110]; while(~scanf("%s %s",str1,str2)) { len1=len2=0; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); len1=strlen(str1); len2=strlen(str2); if(str1[0]=='-') { signal1=1;//1表示负数 len1--; for(i=1;i<=len1;i++) a[len1-i+1]=str1[i]-'0'; } else { signal1=0; for(i=1;i<=len1;i++) a[len1-i+1]=str1[i-1]-'0'; } if(str2[0]=='-') { signal2=1; len2--; for(i=1;i<=len2;i++) b[len2-i+1]=str2[i]-'0'; } else { signal2=0; for(i=1;i<=len2;i++) b[len2-i+1]=str2[i-1]-'0'; } //主体 if(signal1==0&&signal2==0) if(my_compare(a,b)>0)//a-b minus(a,b); else if(my_compare(a,b)<0)//b-a { putchar('-'); minus(b,a); } else printf("0\n"); else if(signal1==0&&signal2==1)//a+b plus(a,b); else if(signal1==1&&signal2==0) { putchar('-'); plus(a,b); } else//b-a { if(my_compare(a,b)<0) minus(b,a); else if(my_compare(a,b)>0)//b-a { putchar('-'); minus(a,b); } else printf("0\n"); } } //system("pause"); return 0;