题目:P1957
题目的主要难点在于判断运算式的总长度,由于式子格式固定为 a ?b = c,扣除固定的两个运算符号,问题进一步转化为求每个数的位数(如为负数则加上负号)
对于一个正数n,我们log10(n)+1就是他的位数,但是对于非正数,我们无法对其取对数,因此我们需要自定义一个函数
1 2 3 4 5 6
| int mylog10(int x) {
if (x > 0) return log10(x) + 1; if (x == 0) return 1; if (x < 0) return log10(-x) + 2; //负号+1 }
|
总代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| #include<bits/stdc++.h> using namespace std; int mylog10(int x) {
if (x > 0) return log10(x) + 1; if (x == 0) return 1; if (x < 0) return log10(-x) + 2; }
int main() { ios::sync_with_stdio(false), cin.tie(0), cout.tie(0); int n; cin >> n; string i2; for (int i = 0; i < n; i++) { string i1; cin >> i1; if (i1 <= "z" && i1 >= "a") { int a, b; cin >> a >> b; if (i1 == "a") { cout << a << "+" << b << "=" << a + b << "\n"; cout << mylog10(a) + mylog10(b) + mylog10(a + b)+ 2 << "\n"; } if (i1 == "b") { cout << a << "-" << b << "=" << a - b << "\n"; cout << mylog10(a) + mylog10(b) + mylog10(a - b) + 2 << "\n"; } if (i1 == "c") { cout << a << "*" << b << "=" << a * b << "\n"; cout << mylog10(a) + mylog10(b) + mylog10(a * b) + 2 << "\n"; } i2 = i1; } else { int a, b; cin >> b; a = stoi(i1); if (i2 == "a") { cout << a << "+" << b << "=" << a + b << "\n"; cout << mylog10(a) + mylog10(b) + mylog10(a + b) + 2 << "\n"; } if (i2 == "b") { cout << a << "-" << b << "=" << a - b << "\n"; cout << mylog10(a) + mylog10(b) + mylog10(a - b) + 2 << "\n"; } if (i2 == "c") { cout << a << "*" << b << "=" << a * b << "\n"; cout << mylog10(a) + mylog10(b) + mylog10(a * b) + 2 << "\n"; } } } return 0; }
|