科学计数法转换(怕忘记 发一下)
程序员文章站
2022-07-15 12:13:47
...
deal是科学计数法 转换函数
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int n;//有效位数
string deal(string s, int & e)// e表示指数 可变的 初始输入时为 0
{
int k=0;//s的下标
while(s.length() >0 && s[0] == '0'){
s.erase(s.begin());//去掉前导0 有些数是00000000.00001 把小数点之前的去掉
}
if(s[0] == '.') {//去掉前导是 小数点 证明是小于1的数
s.erase(s.begin());//去掉小数点
while(s.length() > 0 && s[0] == '0'){
s.erase(s.begin());
e--;//去掉一个0 指数减1
}
}else{//这个情况 证明不是小数,是大于一的 那就找到小数点,先确定指数
while( k< s.length() && s[k] != '.'){
k++;
e++; // 确定指数
}
if(k <s.length()){
s.erase(s.begin() +k); //删除小数点
}
}
if(s.length() == 0) e=0;//去除0以后 是0 那这个数就是0
int num=0;
k=0;
string res;
while(num <n){
if( k<s.length() ) {
res += s[k++];
}else{
res+= '0';
}
num++;
}
return res;
}
int main()
{
string s1,s2,s3,s4;
cin>>n>>s1>>s2;
int e1=0,e2=0;
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;
}
system("pause");
return 0;
}
推荐阅读