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 | #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<cstdio> #include<cstring> #include<string> using namespace std; int ratio = 0, constant = 0; #define IfLetter if (ch <= 'Z'&&ch >= 'A' || ch <= 'z'&&ch >= 'a') #define IfNumber if (ch >= '0'&&ch <= '9' || ch=='+' || ch=='-') int main() { char letter; char ch; int num = 0; bool flag = true; while ((ch = getchar()) != '\n') { IfNumber{ // number(maybe with variable) ungetc(ch, stdin); int re = scanf("%d", &num); //specially prepared for the testcase form like "-a" if (re == 0) { getchar(); ratio -= (flag ? 1 : -1); } ch = getchar(); IfLetter{ ratio += num * (flag ? 1 : -1); letter = ch; } else { constant += num * (flag ? 1 : -1); ungetc(ch, stdin); } num = 0; } else IfLetter{ //pure variable without ratio letter = ch; ratio+=(flag ? 1 : -1); } else if (ch == '=') { flag = false; } } printf("%c=%.3lf", letter, -1.0*constant / ratio); } |
洛谷 P1022 计算器的改良
发表评论