您的位置:首页 > 理论基础 > 数据结构算法

CODEVS 1015 计算器的改良

2018-03-18 13:21 531 查看
题目 http://codevs.cn/problem/1015/
热身题,很直接的写法,直观易理解,代码结构可以自己整理一下
基本思想
    一旦遇到运算符就一定将缓冲区的数据转储
    一旦遇到等号,则正负号相反对待
    一旦遇到字母,就认为当前缓冲区的数是一次项的系数
    一次项和零次项系数分开存储/*
作者:FUNCO_小风
题目:p1015 计算器的改良
*/
#include<stdio.h>
#include<string.h>
int main()
{
// 系数 整数 负号标识
int coe=0, cnt=0, minus=0, i=0;
char in=0,tmp=0,left=1, none=0;
char s[100] = {0};
scanf("%s", s);
for (i=0; i<strlen(s)+1; i++)
{
in = s[i];
if (in == '-')
{
if (minus)
{
cnt -= tmp;
}
else
{
cnt += tmp;
}
minus = left ? 1 : 0;tmp = 0;
}
else if (in == '+')
{
if (minus)
{
cnt -= tmp;
}
else
{
cnt += tmp;
}
minus = left ? 0 : 1;tmp = 0;
}
else if (in == '=' || in == 0)
{
if (minus)
{
cnt -= tmp;
}
else
{
cnt += tmp;
}
minus = 1;
left = 0;tmp = 0;
}
else if (in>='0' && in<='9')
{
tmp = tmp*10+(in-'0');
}
else if (in>='a' && in<='z')
{
if (minus)
{
coe -= tmp > 0 ? tmp : 1;tmp = 0;
}
else
{
coe += tmp > 0 ? tmp : 1;tmp = 0;
}
none = in;
}
if (in == 0)
{
break;
}
}
printf("%c=%.3f\n", none, (-1.0*cnt)/coe);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息