zoukankan      html  css  js  c++  java
  • pat知识点复习--day79

    PAT A1060(STL  string的应用)

    这个题的解决要点: 

      1、首先,有可能存在前导0,全部去掉

      2、有小于1的数,在科学计数法中,在小数点后面的0也是要去掉的,同时去掉的时候要考虑对指数的影响(每一个小数点后,第一个非0之前的0都对应e-1)

      3、大于1的数中,可能有小数点可能没有,这时候需要找到小数点的位置,如果没有,就是0-len都是指数,如果有,找到位置并记录指数,跳出去掉小数点

      4、处理以后的字符串可能会出现精确度不够要后面补0

      5、极端情况下,数字就是0,那么需要把指数修正为0

    易错点:

      1、发现前导零没有消除,是因为‘0’写成了0

      2、因为使用了引用,所以这个函数多次调用会导致e多次被修改,在测试的时候不要多次调用函数

      3、s并不会被函数修改,需要更新str=str(deal,e),不然输出的过程有问题

      4、在不够n后续添0的过程中,不要减少n或者对应temp,不然s在增加temp在减少算了两轮

      5、e有可能是负数,把他合并在整个字符串输出有难度,所以输出前面再单独输出e比较好处理

    #include<string>
    #include<iostream>
    using namespace std;
    int n;
    string deal(string s,int &e)
    {
        while(s.length()>0 && s[0]=='0')
            s.erase(s.begin());
        if(s[0]=='.')
        {
            s.erase(s.begin());
            while(s.length()>0 && s[0]=='0')
            {
                s.erase(s.begin());
                e--;
            }
        }
        else
        {
            int temp=0;
            while(temp<s.length() && s[temp]!='.')
            {
                temp++;
                e++;
            }
            if(temp!=s.length())
            {
                s.erase(s.begin()+temp);
            }
        }
        if(s.length()==0) e=0;
        if(n>=s.length())
        {
            int temp=n;
            while(temp>s.length())
            {
                s.insert(s.length(),"0");
            }
        }
        else
        {
            s.erase(s.begin()+n,s.end());
        }
        return s;
    }
    void shuchu(string s,int e)
    {
        string ans="0.*10^";
        ans.insert(2,s.substr(0,n));
        cout<<ans;
        cout<<e;
    }
    int main()
    {
        string str1,str2;
        bool pd=true;
        cin>>n;
        cin>>str1>>str2;
        int e1=0,e2=0;
        str1=deal(str1,e1);
        str2=deal(str2,e2);
        if(str1!=str2|| e1!=e2)
            pd=false;
        if(pd)
        {
            cout<<"YES ";
            shuchu(str1,e1);
        }
        else
        {
            cout<<"NO ";
            shuchu(str1,e1);
            cout<<" ";
            shuchu(str2,e2);
        }
        return 0;
    }
    View Code
    时间才能证明一切,选好了就尽力去做吧!
  • 相关阅读:
    学生信息管理系统
    设计模式,单例模式
    基础考试题(1)
    基础考试题(0)
    python面向对象进阶
    python面向对象
    Python反射
    14 定时器
    13 JS中的面向对象
    12 DOM操作的相关案例
  • 原文地址:https://www.cnblogs.com/tingxilin/p/12302049.html
Copyright © 2011-2022 走看看