#include<iostream> #include<string> #include<vector> #include<algorithm> using namespace std; int n; string deal(string s,int &e) //【思维】1:吸收多余0:。2:找到“.”判断与1的大小。3:去除“.”的同时统计10的指数(正负与step2有关) { //4:判断是否删完了,删完了表明数字是0。5:存入前n个数字,不足用0补。返回 int k=0; while(s.size()>0 && s[0]==‘0‘) //吸收.前面多余的0 s.erase(s.begin()); if(s[0]==‘.‘) //Situation1:数字小于1 { s.erase(s.begin()); //删除“.” while(s.size()>0 && s[0]==‘0‘) //吸收.前面多余的0 { s.erase(s.begin()); --e; //指数为负 } } else //Situation2:数字大于1 { while(k<s.size() && s[k]!=‘.‘) //数小数点前有几位 { ++k; ++e; } if(k<s.size()) //删除“.” s.erase(s.begin()+k); } if(s.size()==0) //这个数为0 e=0; k=0; //下标归零 int num=0; string str; while(num<n) //将前n位有效数字存入str { if(k<s.size()) str+=s[k++]; //后面接上 else str+=‘0‘; ++num; } return str; } int main() { string s1,s2,s3,s4; cin>>n>>s1>>s2; int e1=0,e2=0; //s1,s2的指数 s3=deal(s1,e1); s4=deal(s2,e2); if(s3==s4 && e1==e2) cout<<"YES 0."<<s3<<"*10^"<<e1<<endl; else cout<<"NO 0."<<s3<<"*10^"<<e1<<" 0."<<s4<<"*10^"<<e2<<endl; return 0; }
时间: 2024-08-09 06:34:33