题目地址:http://pat.zju.edu.cn/contests/pat-a-practise/1060
一道水题,有两点:
1,不要使用float一定会超时(貌似测试点4)
2,一定注意0的表示格式(测试点6),指数为0,1的表示格式(这个可以忽略)
关于第二点,深切吐槽PAT!
本人代码如下:
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
string format(int n,string source){
string target;
if(source=="0"){
target="0.";
for(int i=0;i<n;i++) target.append("0");
target.append("*10^0");//测试点6
}
else{
int i;
for(i=0;i<source.size();i++) if(source.at(i)!='0'&&source.at(i)!='.') break;
int j;
for(j=0;j<source.size();j++) if(source.at(j)=='.') break;
stringstream ss;
if(j<i) ss<<j-i+1;
else ss<<j-i;
string s=ss.str();
for(int k=0;k<n;k++) source.append("0");
if(j-i>=n) target=("0."+source.substr(i,n)+"*10^"+s);
else if(j>i) target=("0."+source.substr(i,j-i)+source.substr(j+1,n-j+i)+"*10^"+s);
else target=(i==source.size()-n)?("0."+source.substr(i,n)+"*10^0")
:("0."+source.substr(i,n)+"*10^"+s);//测试点6
}
return target;
}
int main()
{
int n;
string ft1,ft2;
cin>>n>>ft1>>ft2;
string fft1=format(n,ft1);
string fft2=format(n,ft2);
if(fft1.compare(fft2)==0) cout<<"YES "<<fft1<<endl;
else cout<<"NO "<<fft1<<" "<<fft2<<endl;
return 0;
}