首页 > 编程知识 正文

转换为数字变成科学计数法,转换为科学计数法

时间:2023-05-06 19:40:13 阅读:278175 作者:3729

这个代码的功能是把给定的数用科学计数法的方式实现

代码来自于《算法笔记》P209

数以string类的形式给出,返回的也是string类,并以引用方式修改了指数e,一开始e=0,其中精度n是全局变量,在函数外声明

这个算法是按指定精度保留了非0的数字
至于需要以什么形式输出m.xxx还是0.xxx需要根据题目情况进行讨论
算法把数分成0.xxxx和m.xxxx来处理的,也就是绝对值大于1和小于1的情况
如果有负数,也要在算法外另行处理,这里处理的是数的绝对值 

string deal(string a,int &e){//a是待处理数,e是科学计数法的指数 //k>a.length()是防止把数字给删光了,至少要保留一个数字 int k=0;while(a.length()>0&&a[0]=='0')//去除在最前面的0 a.erase(a.begin());if(a[0]=='.')//去除先导0之后是小数点,说明a是小于1的数 {a.erase(a.begin());//去掉小数点 while(a.length()>0&&a[0]=='0') {a.erase(a.begin());//去掉小数点后非零位之前的所有0 e--;//每去掉一个0,指数e-- }}else//去掉先导0后不是小数点,则找到后面的小数点删除 {while(k<a.length()&&a[k]!='.')//寻找小数点 {k++;e++;}if(k<a.length())//while结束后k<a.length(),说明遇到了小数点 a.erase(a.begin()+k);//删除小数点 }if(a.length()==0)e=0;//去除先导0后a的长度为0,说明这个数是0int num=0;k=0;string res;while(num<n)//精度没有达到n {if(k<a.length())//只要还有数字,就加到res末尾 res+=a[k++];elseres+='0';//否则就res末尾+0 num++;//精度+1 }return res;}

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。