欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 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;

}
相关标签: 算法