80分求助

P1957 口算练习题

@[百因必有AC](/user/113097) 这是我的AC代码: ``` #include<bits/stdc++.h> using namespace std; string s,t; int a,b,ans=0,sum,n; int len(int x) { int t=x,ans=0; if(x==0)return 1; while(t) { ans++; t/=10; } return ans; } int zh(string x) { int ans=0; for(int i=0;i<x.size();i++) { ans*=10; ans+=(x[i]-'0'); } return ans; } int main() { scanf("%d",&n); for(int i=1;i<=n;i++) { cin>>s; if(s=="c") { scanf("%d%d",&a,&b); sum=a*b; ans+=(len(a)+len(b)+len(sum)); printf("%d*%d=%d\n%d\n",a,b,sum,ans+2); t=s; ans=0; } else { if(s=="b") { scanf("%d%d",&a,&b); sum=a-b; ans+=(len(a)+len(b)+len(sum)); if(a>=b) printf("%d-%d=%d\n%d\n",a,b,sum,ans+2); else printf("%d-%d=%d\n%d\n",a,b,sum,ans+3); t=s; ans=0; } else { if(s=="a") { scanf("%d%d",&a,&b); sum=a+b; ans+=(len(a)+len(b)+len(sum)); printf("%d+%d=%d\n%d\n",a,b,sum,ans+2); t=s; ans=0; } else { a=zh(s); scanf("%d",&b); if(t=="b") { sum=a-b; ans+=(len(a)+len(b)+len(sum)); if(a>=b) printf("%d-%d=%d\n%d\n",a,b,sum,ans+2); else printf("%d-%d=%d\n%d\n",a,b,sum,ans+3); ans=0; } if(t=="a") { sum=a+b; ans+=(len(a)+len(b)+len(sum)); printf("%d+%d=%d\n%d\n",a,b,sum,ans+2); ans=0; } if(t=="c") { sum=a*b; ans+=(len(a)+len(b)+len(sum)); printf("%d*%d=%d\n%d\n",a,b,sum,ans+2); ans=0; } } } } } return 0; } ``` 希望能有所帮助!
by Tune_ @ 2020-04-11 17:11:10


加上long,有两个测试点在目标环境下的int只有两个字节,存不下结果的zhi
by 21wang12 @ 2020-04-16 18:11:15


|