zoukankan      html  css  js  c++  java
  • 洛谷 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;
    }
  • 相关阅读:
    .NET委托与事件文章收集
    WCF简介
    设计模式之单例模式
    设计模式之工厂模式
    设计模式之简单工厂模式
    Jquery中bind和live的区别
    C#性能优化实践
    蒋金楠How ASP.NET MVC Works?[持续更新中…]
    按指定质量保存图片
    .net 获取网站根目录总结
  • 原文地址:https://www.cnblogs.com/zzyh/p/9424422.html
Copyright © 2011-2022 走看看