科学计数法转换(怕忘记 发一下)

科学计数法转换(怕忘记 发一下)_第1张图片
deal是科学计数法 转换函数

#include 
#include 
#include 
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;

}

你可能感兴趣的:(科学计数法转换(怕忘记 发一下))