CODE-1015 计算器的改良
2017-03-03 20:10
441 查看
编写程序,解输入的一元一次方程, 将解方程的结果(精确至小数点后三位)输出至屏幕。
样例输入 Sample Input
6a-5+1=2-2a
样例输出 Sample Output
a=0.750
输入字符串,从左到右依次判断,将系数放在等号左边,常数项放在等号右边,然后相除得到答案。
样例输入 Sample Input
6a-5+1=2-2a
样例输出 Sample Output
a=0.750
输入字符串,从左到右依次判断,将系数放在等号左边,常数项放在等号右边,然后相除得到答案。
#include <stdio.h> #include <string.h> int main() { char s[100]; char c; double x = 0,y = 0,ans = 0,flag = 1; //ans存储当前数值 ,flag表示在等式左边还是右边,x表示变量的大小,y表示整数的结果 int cnt = 1; //cnt表示当前的数正还是负 scanf("%s", s); unsigned long len = strlen(s); if (s[0] == '-') cnt = -1; //判断第一个字符 else if (s[0] >= 'a' && s[0] <= 'z'){ //是字母的话 x += 1; c = s[0]; } else ans = ans * 10 + s[0] - '0'; //是数字 for (int i = 1; i < len; i++) { // printf("%.2lf %d %.2lf %.2lf\n",ans,cnt,x,y); if (s[i] >= 'a' && s[i] <= 'z') //是字母就把 ans的值加到x里面去 同时c表示变量是哪个字母 { c = s[i]; x += cnt * flag * ans; ans = 0; cnt = 1; } else if(s[i] >= '0' && s[i] <= '9') { ans = ans * 10 + s[i] - '0'; } else { if(ans) //数字加到y上面去 { y += cnt * flag * ans; ans = 0; cnt = 1; } if (s[i] == '-') cnt = -1; else if (s[i] == '+') cnt = 4000 1; else if (s[i] == '=') flag = -1; } } if (s[len-1] >= '0' && s[len - 1] <= '9') y += cnt * flag * ans; //还要注意最后是整数的情况没有处理 // printf("%.2lf\n",ans); //printf("%.2lf %.2lf\n",x,y); ans = y / x; //还有等于0的情况 if (ans == 0) printf("%c=0.000\n",c); else printf("%c=%.3lf\n",c,-1*y/x); return 0; }
相关文章推荐
- codevs.1015 计算器的改良
- NOIP2000普及组 计算器的改良 Codevs1015 字符串复杂处理
- CODE[VS]1015 计算器的改良
- wikioi 1015 计算器的改良 普及组 2000
- CODEVS 1015 计算器的改良
- codevs 1005 计算器的改良
- 1015 计算器的改良
- 1015 计算器的改良(维基oi)
- 【codevs 1015】计算器的改良
- 1015 计算器的改良
- [模拟]2000年分区联赛普级组之一 计算器的改良
- 编程练习——计算器的改良
- 计算器的改良
- 计算器的改良 (模拟)
- 【codevs1565】【BZOJ2242】计算器,数论练习
- NOIP 2000 计算器的改良 题解
- P1022 计算器的改良 (模拟)
- NOIP2000 计算器的改良
- 洛谷 P1022 计算器的改良
- 【洛谷 1022】 计算器的改良