码迷,mamicode.com
首页 > 其他好文 > 详细

PAT (Advanced Level) 1060 Are They Equal

时间:2020-01-25 16:59:32      阅读:82      评论:0      收藏:0      [点我收藏+]

标签:else   roc   sans   小数   情况   include   com   system   字符   

题解

  找出有效的字符串(t),第一个非零数字的位置(zero)和小数点的位置(point)。

    若 s = "0012.104654",N = 4 则 t = "12104654",zero = 2,point = 4,所以答案为 0.1210*10^(point-zero)

    若 s = "0000.00010465",N = 4 则 t = "10465",zero = 8,point = 4,所以答案为 0.1046*10^(point-zero+1)

    注意 s = "0.0000000"的情况,若 N = 3,则答案为0.000*10^0

代码

#include<bits/stdc++.h>
using namespace std;
string process(int N,string s,int & k);
int main()
{
    int i,N,k1,k2;
    string str1,str2;
    cin>>N>>str1>>str2;
    
    str1=process(N,str1,k1);
    str2=process(N,str2,k2);
    
    if(str1==str2 && k1==k2)    printf("YES %s*10^%d",str1.c_str(),k1);
    else    printf("NO %s*10^%d %s*10^%d",str1.c_str(),k1,str2.c_str(),k2);
    
    system("pause");
    return 0;
}
string process(int N,string s,int & k)
{
    int i,zero,point;
    string t;
    zero=point=-1;
    for(i=0;i<s.size();i++)
    {
        if(s[i]==.)   point=i;
        else if(s[i]==0 && zero==-1)  continue;
        else 
        {
            if(zero==-1)    zero=i;
            t+=s[i];
        }
    }

    if(zero==-1) 
    {
        t.insert(0,N,0);
        k=0;
        return "0."+t;
    }
    else
    {
        if(point==-1) point=i;
        if(t.size()<N) t.insert(t.size(),t.size()-N,0);
        if(zero>point)  k=point-zero+1;
        else    k=point-zero;
        return "0."+t.substr(0,N);
    }   
}

PAT (Advanced Level) 1060 Are They Equal

标签:else   roc   sans   小数   情况   include   com   system   字符   

原文地址:https://www.cnblogs.com/VividBinGo/p/12233093.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!