1、题目地址:http://www.patest.cn/contests/pat-a-practise/1060
2、代码
以下代码通不过最后一个测试点
#include <iostream>
#include <vector>
#include <string>
using namespace std;
struct number{
string base;
int exp;
};
bool operator==(const number &l,const number &r){
if(l.base == r.base && l.exp == r.exp)
return true;
return false;
}
number stand_form(string source,int n){
number result;
result.base = "0.";
size_t len = n + 2;
unsigned int i ;
bool input = false;
for(i = 0; i < source.size();++i){
if(input){
if(result.base.size() == len)
break;
else if(source[i] != '.')
result.base.push_back(source[i]);
}else {
if(source[i] != '0' && source[i] != '.'){
input = true;
result.base.push_back(source[i]);
}
}
}
while(result.base.size() < len){
result.base.push_back('0');
}
result.exp = 0;
for(unsigned int i=0;i < source.size();++i){
if(source[i] != '.' ){
if(source[i] == '0' && result.exp == 0)
;
else
result.exp++;
}else if(source[i] == '.'){
if(result.exp > 0)
break;
while(i < source.size()-2 && source[++i] == '0'){
result.exp--;
}
i = source.size();//退出for
}
}
return result;
}
int main()
{
int N;
string A,B;
cin >> N >> A >> B;
bool equal = false;
number stand_A,stand_B;
stand_A = stand_form(A,N);
stand_B = stand_form(B,N);
if(stand_A == stand_B)
equal = true;
if(equal){
cout << "YES" << " " << stand_A.base;
cout << "*10^" << stand_A.exp;
cout << endl;
}else{
cout << "NO" << " ";
cout << stand_A.base ;
cout << "*10^" << stand_A.exp;
cout << " ";
cout << stand_B.base;
cout << "*10^" << stand_B.exp;
cout << endl;
}
return 0;
}