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;}
原创粉丝点击