#include<stdio.h> #include<string.h> int is_plus(int jlen, int ilen, int sum[], char inter[], char jnter[]) { int i, j, t, loop, temp, e = 0 ; for(j=jlen-1; j>=0; --j) { loop = jlen-1-j; for(i=ilen-1; i>=0; --i, ++loop) { temp = sum[loop]; sum[loop] = (e+sum[loop]+(inter[i]-'0')*(jnter[j]-'0'))%10; e = (e+temp+(inter[i]-'0')*(jnter[j]-'0'))/10; } for(t=loop; t<1004 && e; ++t) { temp = sum[t]; sum[t] = (e + sum[t])%10; e = (e + temp)/10; } } return 0; } int is_add(int jlen, int ilen, int sum[], char inter[], char jnter[]) { int len, j, i, e = 0, temp; len = ilen < jlen ? ilen:jlen; for(i=0; i<len; ++i) { temp = sum[i]; sum[i] = (e + sum[i] + (inter[len-i-1]-'0') + (jnter[jlen-i-1]-'0'))%10; e = (e + temp + (inter[len-i-1]-'0') + (jnter[jlen-i-1]-'0'))/10; } if(ilen-len>0) for(j=i; j<ilen; ++j) { temp = sum[j]; sum[j] = (e + sum[j] + (inter[j]-'0'))%10; e = (e + temp +(inter[j]-'0'))/10; } else if(jlen-len>0) for(j=i; j<jlen; ++j) { temp = sum[j]; sum[j] = (e + sum[j] + (jnter[j]-'0'))%10; e = (e + temp +(jnter[j]-'0'))/10; } for(j=i; j<1004 && e; ++j) { temp = sum[j]; sum[j] = (e + sum[j])%10; e = (e + temp)/10; } return 0; } int main() { int i, j, ilen, jlen, sum[1004], fflag, t, temp; char cali[502], calj[502], calij[502], flag, *judge="7463847412"; memset(sum, 0, sizeof(sum)); memset(cali, 0, sizeof(cali)); memset(calj, 0, sizeof(calj)); memset(calij, 0, sizeof(calij)); while(scanf("%s", calij) != EOF) { getchar(); fflag = temp = 0; printf("%s", calij); ilen = strlen(calij); for(i=0; (calij[i]-'0' == 0)&&i<ilen-1; ++i); t = ilen; ilen = ilen - i; for(j=0; j<502&&i<t; ++i, ++j) { cali[j] = calij[i]; } memset(calij, 0, sizeof(calij)); flag = getchar(); getchar(); printf(" %c ", flag); scanf("%s", calij); getchar(); printf("%s\n", calij); jlen = strlen(calij); for(i=0; (calij[i]-'0' == 0)&&i<jlen-1; ++i); t = jlen; jlen = jlen - i; for(j=0; j<502&&i<t; ++i, ++j) { calj[j] = calij[i]; } if(ilen > 10){temp=1; printf("first number too big\n");} else if(ilen == 10) { i = 0; while(cali[i]-'0' == judge[9-i]-'0' && i<10) ++i; if(cali[i]-'0'>(judge[9-i]-'0')) printf("first number too big\n"); } if(jlen > 10){temp=1; printf("second number too big\n");} else if(jlen == 10) { i = 0; while(calj[i]-'0' == judge[9-i]-'0' && i<10) ++i; if(calj[i]-'0'>(judge[9-i]-'0')) printf("second number too big\n"); } switch(flag) { case '*': is_plus(jlen, ilen, sum, cali, calj); break; case '+': is_add(jlen, ilen, sum, cali, calj); break; default: return 1; } { for(i=1003; !sum[i]&& i>=9; --i); if(i>=10) printf("result too big\n"); else if(i == 9) { while(sum[i] == judge[i]-'0' && i>0) --i; if(sum[i]>(judge[i]-'0')) printf("result too big\n"); } } memset(sum, 0, sizeof(sum)); memset(cali, 0, sizeof(cali)); memset(calj, 0, sizeof(calj)); memset(calij, 0, sizeof(calij)); } return 0; }
WA了差不多十次了,虽然说百度之后能看到有比我这短了几倍的代码,但我调试了两天,WA 了那么多次的确有点不甘心,所以,希望哪位做过此题的前人能够帮我测试一下代码,不为了别的,只是希望能够帮帮我不要再把时间放在这里了……