• 洛谷 P1022 计算器的改良


    题解:字符串模拟

    坑点:

    1) 0/-1=-0.

    这是因为(来自洛谷讨论区某大犇)

    double下存储的数字会有精度误差,比如0可能被存成0.000000000...01
    然而如果你乘上或者除以一个负数,可能就变成了-0.000000000...01
    然后因为浮点数是先判定符号再计算数值,就出现了负0这一情况

     2)我遇到的就这一个....

    具体做法是以-,+,=为分界,分别累加字母的系数和实数

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    
    int now,len,f,c,a,b;
    
    string s;        //6a-5+1=2-2a;
    
    char ans;
    
    int main(){
        ios::sync_with_stdio(false);
        cin>>s;len=s.length();f=1;s[len]='+';len++;
        while(1){                 
            if(s[now]>='a'&&s[now]<='z'){
                a=a+f*(c==0?1:c);ans=s[now];
                f=1; c=0; now++;
                continue; 
            }
            if(s[now]=='-'){
                b=b+f*c;
                f=-1;c=0;now++;
                continue; 
            }
            if(s[now]=='+'){
                b=b+f*c;
                f=1;c=0;now++;
                continue;
            }
            if(s[now]>='0'&&s[now]<='9'){
                c=c*10+s[now]-'0';
                now++;
                continue;
            }
            if(s[now]=='='){
                b=b+f*c;
                break;
            }
        }
    
        b=b*-1;now++;c=0;f=1;    
        while(now<len){
            if(s[now]>='a'&&s[now]<='z'){
                a=a-f*(c==0?1:c);ans=s[now];
                f=1;c=0;now++;
                continue;
            }
            if(s[now]=='-'){
                b=b+f*c;
                f=-1;c=0;now++;
                continue;
            }
            if(s[now]=='+'){
                b=b+f*c;
                f=1;c=0; now++;
                continue;
            }
            if(s[now]>='0'&&s[now]<='9'){
                c=c*10+s[now]-'0';
                now++;
                continue;    
            }
        }
        if(b==0)printf("0.000
    ");
        else 
        printf("%c=%.3f
    ",ans,b*1./a);
        return 0;
    }
  • 相关阅读:
    springboot整合springmvc应用
    spring注解使用
    亨元模式 四大引用 逃逸引用 池化思想
    springboot整合连接池
    springboot整合mybatis(待更新)
    php安装imagick扩展
    js复制功能代码
    PHP7兼容mysql_connect的方法
    linux开机启动
    centos8安装php扩展memcached报错
  • 原文地址:https://www.cnblogs.com/zzyh/p/9424422.html
Copyright © 2020-2023  润新知