#include #include #include void main() { void jia(char*,char*,char*,char*,char*); void jian(char*,char*,char*,char*,char*); void fujia(char*,char*,char*,char*,char*); void fujian(char *,char *,char *,char *,char *); void zuoyi(char*,int); int comp(char *,char *,char *); char str1[500]="0",str2[500]="0",str3[500]="0",y[1],*p,*q,*r; int f,g,n; printf("请输入第一个大整数:\\n"); gets(str1); printf("请输入运算符:\\n"); gets(y); printf("请输入第二个大整数:\\n"); gets(str2); p=str1+strlen(str1)-1; q=str2+strlen(str2)-1; r=str3+strlen(str2); if(strlen(str1)>strlen(str2)) r=str3+strlen(str1); f=strlen(str1); g=strlen(str2); if(*y=='+') { if(*str1!='-'&&*str2!='-') jia(p,q,r,str1,str2); if(*str1=='-'&&*str2!='-') { zuoyi(str1,f); p=str1+strlen(str1)-1; if(strlen(str1)>strlen(str2)) fujian(p,q,r,str1,str2); else if(strlen(str1) else { n=comp(str1,str2,p); if(n==1) fujian(p,q,r,str1,str2); else { r=str3+strlen(str2); if(strlen(str1)>strlen(str2)) r=str3+strlen(str1); jian(q,p,r,str2,str1); } } } if(*str1!='-'&&*str2=='-') { zuoyi(str2,g); q=str2+strlen(str2)-1; if(strlen(str1)>strlen(str2)) jian(p,q,r,str1,str2); else if(strlen(str1) else { n=comp(str1,str2,p); if(n==1) { r=str3+strlen(str2); if(strlen(str1)>strlen(str2)) r=str3+strlen(str1); jian(p,q,r,str1,str2); } else fujian(q,p,r,str2,str1); } } if(*str1=='-'&&*str2=='-') { zuoyi(str1,f); zuoyi(str2,g); p=str1+strlen(str1)-1; q=str2+strlen(str2)-1; fujia(p,q,r,str1,str2); } } if(*y=='-') { if(*str1!='-'&&*str2!='-') { if(strlen(str1)>strlen(str2)) jian(p,q,r,str1,str2); else if(strlen(str1) else { n=comp(str1,str2,p); if(n==1) { r=str3+strlen(str2); if(strlen(str1)>strlen(str2)) r=str3+strlen(str1); jian(p,q,r,str1,str2); } else fujian(q,p,r,str2,str1); } } if(*str1=='-'&&*str2!='-') { zuoyi(str1,f); p=str1+strlen(str1)-1; fujia(p,q,r,str1,str2); } if(*str1!='-'&&*str2=='-') { zuoyi(str2,g); q=str2+strlen(str2)-1; jia(p,q,r,str1,str2); } if(*str1=='-'&&*str2=='-') { zuoyi(str1,f); zuoyi(str2,g); q=str2+strlen(str2)-1; p=str1+strlen(str1)-1; r=str3+strlen(str2); if(strlen(str1)>strlen(str2)) r=str3+strlen(str1); if(strlen(str1)>strlen(str2)) fujian(p,q,r,str1,str2); else if(strlen(str1) else { n=comp(str1,str2,p); if(n==1) fujian(p,q,r,str1,str2); else jian(q,p,r,str2,str1); } } } } void jia(char *p1,char *q1,char *r1,char *st1,char *st2) { int s,d,j=0; for(;p1>=st1&&q1>=st2;p1--,q1--,r1--) { d=0;s=*p1+*q1-'0'; if(*(p1+1)+*(q1+1)+j-'0'>'9') d=1; j=d; if(*p1+*q1+j-'0'>'9') { s=*p1+*q1-'9'-1; } *r1=d+s; } if(*(p1+1)+*(q1+1)-'0'>'9') *r1+=1; if(p1>=st1) { for(;p1>=st1;r1--,p1--) { if(*r1+*p1>'9') *r1=-9,*(r1-1)+=1; *r1+=*p1; } } if(q1>=st2) { for(;q1>=st2;r1--,q1--) { if(*r1+*q1>'9') *r1=-9,*(r1-1)+=1; *r1+=*q1; } } while(*r1=='0') r1++; printf("结果为:"); while(*r1!='\\0') printf("%c",*(r1++)); printf("\\n"); system("pause"); } void jian(char *p1,char *q1,char *r1,char *st1,char *st2) { int d,j=0; for(;p1>=st1&&q1>=st2;p1--,q1--,r1--) { d=0; if(*p1-*q1-j+'0'<'0') { *r1=*p1-*q1-j+10+'0'; d=1; } else *r1=*p1-*q1-j+'0'; j=d; } if(p1>=st1) for(;p1>=st1;r1--,p1--) { d=0; if (*p1-j<'0') { *r1=*p1-j+10; d=1; } else *r1=*p1-j; j=d; } while(*r1=='0') r1++; printf("结果为:"); while(*r1!='\\0') printf("%c",*(r1++)); printf("\\n"); system("pause"); } void fujia(char *p1,char *q1,char *r1,char *st1,char *st2) { r1++; int s,d,j=0; for(;p1>=st1+1&&q1>=st2+1;p1--,q1--,r1--) { d=0;s=*p1+*q1-'0'; if(*(p1+1)+*(q1+1)+j-'0'>'9') d=1; j=d; if(*p1+*q1+j-'0'>'9') { s=*p1+*q1-'9'-1; } *r1=d+s; } if(*(p1+1)+*(q1+1)-'0'>'9') *r1+=1; if(p1>=st1+1) { for(;p1>=st1+1;r1--,p1--) { if(*r1+*p1>'9') *r1=-9,*(r1-1)+=1; *r1+=*p1; } } if(q1>=st2+1) { for(;q1>=st2+1;r1--,q1--) { if(*r1+*q1>'9') *r1=-9,*(r1-1)+=1; *r1+=*q1; } } *r1='-'; while(*r1=='0') r1++; printf("结果为:"); while(*r1!='\\0') printf("%c",*(r1++)); printf("\\n"); system("pause"); } void fujian(char *p1,char *q1,char *r1,char *st1,char *st2) { int d,j=0; for(;p1>=st1&&q1>=st2;p1--,q1--,r1--) { d=0; if(*p1-*q1-j+'0'<'0') { *r1=*p1-*q1-j+10+'0'; d=1; } else *r1=*p1-*q1-j+'0'; j=d; } if(p1>=st1) for(;p1>=st1;r1--,p1--) { d=0; if (*p1-j<'0') { *r1=*p1-j+10; d=1; } else *r1=*p1-j; j=d; } *r1='-'; while(*r1=='0') r1++; printf("结果为:"); while(*r1!='\\0') printf("%c",*(r1++)); printf("\\n"); system("pause"); } void zuoyi(char *st,int k) { char *s; s=st+k-1; for(;st<=s;st++) *st=*(st+1); *st='\\0'; } int comp(char *st1,char *st2,char *r) { for(;st1<=r;st1++,st2++) { if(*st1>*st2) return 1; if(*st1<*st2) return 0; } return 0; }