CODE[VS]1015 计算器的改良
来源:互联网 发布:淘宝售假申诉补充留言 编辑:程序博客网 时间:2024/06/05 22:16
题目:http://codevs.cn/problem/1015/
思路:将方程式简化为一个系数,一个常数,然后计算未知数值
题解:
/* 1015 计算器的改良 */#include <stdio.h>#define DEBUG#define toInt(X) (X-'0')#define MAXL 200char equation[MAXL]; /* 方程式 */ double coefficient; /* 系数 */ double constant; /* 常数 */ double unknown_n; /* 未知数值 */ char unknown_ch; /* 未知数字符 *//* 获取系数,常数,未知数字符 */void deal_equation(){ double t; /* 临时值 */ char ch; /* 当前方程式字符 */ int i; /* 索引 */ double sign; /* 符号位 */ int is_left; /* 当前值位于等号的左边还是右边 */ /* 初始化索引指,符号位,等号位置,系数和常数 */ i = 0; t = 0.0; is_left = 1; sign = 1.0; coefficient = constant = 0.0; while('\0' != (ch = equation[i++])){ /* 下一个字符为数字 */ if(ch >= '0' && ch <= '9'){ if(0.0 == t){ t = toInt(ch) * sign * is_left; } else{ t = t * 10.0 + toInt(ch) * sign * is_left; } } /* 下一个字符为未知数字符, 上一次获取值为系数 */ else if(ch >= 'a' && ch <= 'z'){ if(0.0 == t){ t = 1.0 * sign * is_left; } unknown_ch = ch; coefficient = coefficient + t; t = 0.0; sign = 1; } /* 下一个字符为 '-' 操作符, 上一个值为常数,下一个符号为负 */ else if(ch == '-'){ constant = constant + t; t = 0.0; sign = -1; } /* 下一个字符为 '+' 操作符, 上一个值为常数,下一个符号为正 */ else if(ch == '+'){ constant = constant + t; t = 0.0; sign = 1; } /* 下一个字符为 '=' 操作符, 上一个值为常数,反转等号后的符号 */ else if(ch == '='){ constant = constant + t; t = 0.0; sign = 1; is_left = -1; } } /* 最后一个常量加入到常数中 */ constant = constant + t; } /* 主函数入口 */ int main(int argc, char *argv[]) {#ifdef DEBUG FILE *fp; if(NULL == (fp = fopen("data.txt", "r"))){ return 1; }#endif /* 获取方程式 */#ifdef DEBUG fscanf(fp, "%s", equation);#else scanf("%s", equation);#endif /* 分析方程式,获取系数,常数和未知字符 */ deal_equation(); unknown_n = constant / coefficient * -1.0; printf("%c=%0.3f", unknown_ch, unknown_n);#ifdef DEBUG fclose(fp);#endif return 0;}
阅读全文
0 0
- CODE[VS]1015 计算器的改良
- CODE 1015 计算器的改良
- CODE-1015 计算器的改良
- 1015 计算器的改良
- 1015 计算器的改良
- 【codevs 1015】计算器的改良
- codevs.1015 计算器的改良
- 1015 计算器的改良(维基oi)
- NOIP2000 计算器的改良
- NOIP2000计算器的改良
- 计算器的改良 (模拟)
- 计算器的改良
- 计算器的改良(NOIP2000)
- Tsinsen A1128 计算器的改良
- 洛谷 P1022 计算器的改良
- 【洛谷 1022】 计算器的改良
- 洛谷 P1022 计算器的改良
- codevs 1005 计算器的改良
- JavaScript 箭头函数
- intellij IDEA+scala编译报错
- 使用Arrays.asList注意事项
- C语言数独游戏求解
- LSTM理解
- CODE[VS]1015 计算器的改良
- Android 音视频开发(四):使用 Camera API 采集视频数据
- vue+mint ui+省市区三级联动(编辑地址)
- Java数组实现栈
- ceph scrub errors
- Android的安全机制
- 代理模式
- 恶意代码分析实战 Lab 3-3 习题笔记
- Nuttx启动