【落谷1957】口算练习题题解
这个题有几个坑我全踩了:
1.首先如果检测每一行初始的第一个元素是不是字符的时候一定要创造一个临时变量储存前面代表运算的字符(一定注意是前面的不是前一次的)
2.零和负数时求长度的函数会有点不一样本身就带一位
好像C语言和c++有个函数叫sscanf可以比这个更简单,不过不太明白它的用法,欢迎大佬来教我
代码:
#include "iostream"
#include "string"
#include "cstdlib"
using namespace std;
int len(int a) {
int ans;
if (a <= 0)//0和负数会多一位
ans = 1;
if (a > 0)
ans = 0;
while (a) {
a /= 10;
ans++;
}
return ans;
}
int main() {
int x;
int a = 0, b = 0;
string s;
string str=" ";
cin >> x;
for (int i = 0; i < x; i++) {
if(str[0]=='a'||str[0]=='c'||str[0]=='b')
s = str;
cin >> str;
if (str[0] == 'a' || str[0] == 'c' || str[0] == 'b') {
if (str == "a") {
cin >> a >> b;
cout << a << '+' << b << '=' << a + b << endl;
cout << len(a) + len(b) + len(a + b) + 2 << endl;
}
else if (str == "c") {
cin >> a >> b;
cout << a << '*' << b << '=' << a * b << endl;
cout << len(a) + len(b) + len(a * b) + 2 << endl;
}
else if (str == "b") {
cin >> a >> b;
cout << a << '-' << b << '=' << a - b << endl;
cout << len(a) + len(b) + len(a - b) + 2 << endl;
}
}
else {
a = atoi(str.c_str());
if (s == "a") {
cin >> b;
cout << a << '+' << b << '=' << a + b << endl;
cout << len(a) + len(b) + len(a + b) + 2 << endl;
}
else if (s == "c") {
cin >> b;
cout << a << '*' << b << '=' << a * b << endl;
cout << len(a) + len(b) + len(a * b) + 2 << endl;
}
else if (s == "b") {
cin >> b;
cout << a << '-' << b << '=' << a - b << endl;
cout << len(a) + len(b) + len(a - b) + 2 << endl;
}
}
}
}