需要看题目的话点这里:我是题目
这题我自己没有啥好的思路,但是看了睛神的算法笔记之后还是大体理解了。
题目是说,给三个数字,第一个数字是精度,第二个第三个是要比较的数。按照精度的前几位相比,如果精度位相同就打印YES 0.XXXX X的位数是精度,然后乘以10的X次方,就是科学计数法,如果按照精度比不一样,就打印NO 然后接上两个数字的科学计数法。
解题思路:
deal函数:
main函数:
代码:
#include<stdio.h>
#include<string>
#include<iostream>
using namespace std;
int n;
string deal(string str, int &e){
int k = 0;
while(str.size() > 0 && str[0] == '0'){
str.erase(str.begin());
}
if(str[0] == '.') {
str.erase(str.begin());
while(str.size() > 0 && str[0]=='0'){
str.erase(str.begin());
e--;
}
}
else {
while(k < str.size() && str[k] != '.'){
k++;
e++;
}
if(k < str.size()){
str.erase(str.begin()+k);
}
}
if(str.size() == 0) e=0;
k = 0;
string res;
for(int i = 0; i < n; i++){
if(k < str.size()){
res = res + str[k++];
}else{
res = res + '0';
}
}
return res;
}
int main(){
string str1, str2, str3, str4;
cin>>n>>str1>>str2;
int e1 = 0, e2 = 0;
str3 = deal(str1, e1);
str4 = deal(str2, e2);
if(str3 == str4 && e1 == e2){
cout<<"YES 0."<<str3<<"*10^"<<e1<<endl;
}else{
cout<<"NO 0."<<str3<<"*10^"<<e1<<" 0."<<str4<<"*10^"<<e2<<endl;
}
return 0;
}