求助,全WA,但是测试没问题。

P1957 口算练习题

@[caomuyilin](/user/462079) 这好像是落谷在线ide的问题,好像会读入末尾的换行符,输入成这样(见代码)。 而且你代码有问题当getlen里的a==0时返回的长度是0,应该是1,也帮你改了 ```c #include <bits/stdc++.h> using namespace std; string s; char c; int cal(char a, int b, int c) { if (a == '+') return b + c; if (a == '-') return b - c; if (a == '*') return b * c; return b + c; } int getlen(int a) { int len = 0, flag = 0; if(a==0) { return 1; } if (a < 0) { flag = 1; a = -a; } while (a) { a /= 10; len++; } return len + flag; } void process(string s) { int a = 0, b = 0, i = 0; int len = s.length(), ans=0; string temp; if (s[0] >= 'a' && s[0] <= 'z') { c = s[0]; if (c == 'a') c = '+'; else if (c == 'b') c = '-'; else c = '*'; i = 2; } while (s[i] != ' ' && i < len) { a = a * 10 + s[i] - '0'; i++;} i++; while (s[i] != '\0') { b = b * 10 + s[i] - '0'; i++;} cout <<a<<c<< b << "=" << cal(c, a, b) << endl; ans = getlen(cal(c, a, b))+getlen(a)+getlen(b)+2; cout << ans << endl; } int main() { int n; string k,l; cin >> n; for (int i = 1; i <= n; i++) { cin>>s; if(s[0] >= 'a' && s[0] <= 'z') { cin>>k>>l; s=s+" "+k+" "+l; } else { cin>>k; s=s+" "+k; } process(s); } return 0; } ```
by quliannanyishou @ 2022-06-23 21:20:51


@[caomuyilin](/user/462079) 额,过了怎么不说一声,整的我挺尴尬
by quliannanyishou @ 2022-06-23 21:45:50


@[quliannanyishou](/user/682390) 谢谢大哥
by caomuyilin @ 2022-06-23 23:22:18


|