本文主要是介绍题记(41)--简易计算器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
一、题目内容
二、输入描述
三、输出描述
四、输入输出示例
五、完整C语言代码
一、题目内容
读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
二、输入描述
测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
三、输出描述
对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
四、输入输出示例
输入:
1 + 2 4 + 2 * 5 - 7 / 11 0输出:
3.00 13.36
五、完整C语言代码
AC代码~#include<stdio.h>
#include<string.h>int IsDigit(char s) {if ('0' <= s && s <= '9')return 1;return 0;
}int Isch(char s) {if (s == '+' || s == '-' || s == '*' || s == '/')return 1;return 0;
}double cal(double a, double b, char tmp) {if (tmp == '+')return a + b;else if (tmp == '-')return a - b;else if (tmp == '*')return a * b;elsereturn a / b;
}int main() {double s1[100]; // 数字栈char s2[100]; // 符号栈int top1, top2; // 二者指针char s[200];while (gets(s)) {if (strcmp(s, "0") == 0)break;top1 = top2 = -1;int i = 0;while (s[i] != '\0') {if (IsDigit(s[i])) {int num = 0;while (IsDigit(s[i])) {num = num * 10 + (s[i] - '0');i++;}top1++;s1[top1] = num * 1.0;} else if (Isch(s[i])) {if (top2 != -1) { // 符号栈不空情况if (s[i] == '+' || s[i] == '-') {while (top2 != -1) {char stmp = s2[top2];top2--;double n1 = s1[top1];double n2 = s1[top1 - 1];top1 = top1 - 1; // 本应减2,后面加1,所以减1double tmp = cal(n2, n1, stmp);s1[top1] = tmp;}} else {while ((s2[top2] == '*' || s2[top2] == '/') && top2 != -1) {char stmp = s2[top2];top2--;double n1 = s1[top1];double n2 = s1[top1 - 1];top1 = top1 - 1; // 本应减2,后面加1,所以减1double tmp = cal(n2, n1, stmp);s1[top1] = tmp;}}}top2++;s2[top2] = s[i];i++;} elsei++;}while (top2 != -1) { // 结束后运算栈内剩余char stmp = s2[top2];top2--;double n1 = s1[top1];double n2 = s1[top1 - 1];top1 = top1 - 1; // 本应减2,后面加1,所以减1double tmp = cal(n2, n1, stmp);s1[top1] = tmp;}printf("%.2f\n", s1[0]);}return 0;
}
这篇关于题记(41)--简易计算器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!