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