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;
    }
  • 相关阅读:
    注解
    使用反射机制调用属性和私有成员与代理模式的介绍
    动态代理模式
    SVN的安装与常用功能使用以及解决安装配置过程中的一些错误
    企业私服
    -Java-log4j
    List,Set,Map用法以及区别
    接口和抽象类有什么区别
    Dalvik opcodes
    外派公司或者外包公司,真的适合选择吗?
  • 原文地址:https://www.cnblogs.com/zzyh/p/9424422.html
Copyright © 2011-2022 走看看