简单计算器
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submission(s) : 131 Accepted Submission(s) : 54 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。 Input 测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。 Output 对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。 Sample Input 1 + 2 4 + 2 * 5 - 7 / 11 0 Sample Output 3.00 13.36 Source 浙大计算机研究生复试上机考试-2006年
#include<stdio.h> #include<string.h> int main() { int i, j, y, t, k, w; double a[1001], sum; char s[1001], b[1001]; while (gets(s)) { if (strcmp(s, "0") == 0) break; sum = 0; w = 0; y = 0; j = 0; a[0] = 0; for (i = 0;i<strlen(s);i++) { if (s[i] >= '0'&&s[i] <= '9') { a[j] = a[j] * 10 + s[i] - 48; y = 1; } else if (y == 1) { j++; a[j] = 0; y = 0; } } t = 1; for (i = 0;i<strlen(s);i++) { if (s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/') { b[t] = s[i]; t++; } } for (i = 1;i<t;i++) { if (b[i] == '*') { a[i - 1 - w] = a[i - 1 - w] * a[i - w]; for (k = i - w;k<j - w;k++) a[k] = a[k + 1]; w++; } if (b[i] == '/') { a[i - 1 - w] = a[i - 1 - w] / a[i - w]; for (k = i - w;k<j - w;k++) a[k] = a[k + 1]; w++; } } k = 1; sum = a[0]; for (i = 0;i<t;i++) { if (b[i] == '-') { sum -= a[k]; k++; } if (b[i] == '+') { sum += a[k]; k++; } } printf("%.2f\n", sum); } return 0; }