PAT 1060

题目 : Are They Equal

分值 : 25
难度 : 中等题
思路 : 这个有点烦的,大数,所以要先搞个string来存,要对字符处理,首先要清掉头部的零,然
       后计算出给的数的科学计数法的指数,然后把 . 去掉弄出一个有效的非零开头的数字字符
坑点 : 他会有很多类似 0000000.0 000.0000 这样的输入,这样都是 0 
评语 : 稍微有点烦的string题

具体代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
#include <string>
using namespace std ;
int N;
string find (string s , int &e)
{
while(s.size() > 0 && s[0] =='0')s.erase(s.begin()) ; //去除开始的零
if(s[0] == '.' )
{
s.erase(s.begin()) ;
while(s.size() > 0 && s[0]=='0' ) {s.erase(s.begin()) ; e-- ;}
if(s.size() == 0) e= 0 ;
}
else {
int cur = 0;
while (cur < s.size() && s[cur++] != '.') e++;
if (s[cur - 1] == '.') s.erase(s.begin() + cur-1);
}
if(s.size()==0) e=0;
int n = 0 ;
string res ;
while(n < N )
{
if(n < s.size()) res+= s[n] ;
else res+='0';
n++ ;
}
return res;

}
int main() {

string s1, s2;
cin >> N >> s1 >> s2;
int c1=0 , c2= 0 ;
s1 = find(s1 , c1 );
s2 = find(s2 , c2);
int flag = 0;
if(s1 == s2 && c1 ==c2)
cout <<"YES 0."<<s1<<"*10^"<<c1 ;
else
{
cout <<"NO 0."<<s1<<"*10^"<<c1 <<" 0."<<s2<<"*10^"<<c2 <<endl;
}

}