标题
表达式求值
类别
字符串处理
时间限制
1S
内存限制
256Kb
问题描述
表达式由两个非负整数x,y和一个运算符op构成,求表达式的值。
这两个整数和运算符的顺序是随机的,可能是”x op y”, “op x y”或者 “x y op”,例如,“25 + 3”表示25加3,“5 30 *” 表示5乘以30,“/ 600 15”表示600除以15。
输入说明
输入为一个表达式,表达式由两个非负整数x,y和一个运算符op构成,x,y和op之间以空格分隔,但顺序不确定。
x和y均不大于10000000,op可以是+,-,*,/,%中的任意一种,分表表示加法,减法,乘法,除法和求余。
除法按整数除法求值,输入数据保证除法和求余运算的y值不为0。
输出说明
输出表达式的值。
输入样例
样例1输入
5 20 *
样例2输入
4 + 8
样例3输入
/ 8 4
输出样例
样例1输出
100
样例2输出
12
样例3输出
2
最主要就是字符串数字的转换 例如:先求出长度length=strlen(str[i])
for(int i=length-1;i>=0;i--)
num+=pow(10,j)*str[i][nu-j-1]
数字的长的是strlen
num=pow(10,j
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<ctype.h>
int main()
{
char str[3][12];
int i,num[2]={0}, flag = 0, l = 0;//max和min来标记
int x = 0;//数字的位置
for (i = 0; i < 3; i++) {
scanf_s("%s", str[i], 12);
if (str[i][0]>='0'&&str[i][0]<='9') {//如果是数字的话,计算数字
int nu = strlen(str[i]);
for (int j = nu - 1; j >= 0; j--)
num[x] += (int)pow(10, j) * (str[i][nu-j-1] - '0');//这里的数字求和:例如
x++;
}
else flag = i;//如果不是的话去标记,运算符的位置
}
int temp=0;
/*if (num[0] > num[1]) {//交换
temp = num[0];
num[0] = num[1];
num[1] = temp;
}*///事实证明不需要排序
switch (str[flag][0]) {
case '*':printf("%d", num[1] * num[0]); break;
case '/':printf("%d", num[1] / num[0]); break;
case '%':printf("%d", num[1] % num[0]); break;
case '+':printf("%d", num[1] + num[0]); break;
case '-':printf("%d", num[1] - num[0]); break;
}
return 0;
}