科学计数法,上次这道题难死我了,比较烦杂,这次却很冷静了,虽然忘了上次咋做的,用一个很乱的算法。。
这次用了半个小时,还是卡在了最后一个点,是对于0的情况没有判定,默认都存在一位非零位了。。不过相比而言进步很大了,则此思路很清晰,加油。
#include<bits/stdc++.h>
using namespace std;
int fnz(string a){
int i;
int dot=-1;
for(i=0;i<a.size();i++){
if(a[i]!='0'&&a[i]!='.')break;
if(a[i]=='.')dot=i;
if(i==a.size()-1)return 0;
}
if(dot!=-1)return dot-i+1;
int j;
for(j=i;j<a.size();j++){
if(a[j]=='.')break;
}
return j-i;
}
string fns(string a,int n){
int i;
string ans;
for(i=0;i<a.size();i++){
if(a[i]!='0'&&a[i]!='.')break;
}
n+=i;
for(int j=i;j<n;j++){
if(j>=a.size()){
ans+='0';
}
else if(a[j]=='.')n++;
else {
ans+=a[j];
}
}
return ans;
}
int main(){
int n;
string num1,num2;
cin>>n>>num1>>num2;
if(fnz(num1)==fnz(num2)&&fns(num1,n)==fns(num2,n)){
printf("YES ");
printf("0.%s",fns(num1,n).c_str());
printf("*10^%d",fnz(num1));
}
else {
printf("NO ");
printf("0.%s",fns(num1,n).c_str(),fnz(num1));
printf("*10^%d",fnz(num1));
printf(" 0.%s",fns(num2,n).c_str(),fnz(num2));
printf("*10^%d",fnz(num2));
}
return 0;
}