问题描述
根据给定的字符串形式要求输出对应的用数字
题目分析
这个题可以用字符串来强行求解,有两种情况,一种是指数为正,一种是指数为负。这两种情况我们需要逐个分析,主要是看字符串的倒数第三个元素是+还是-。
还有一点,就是字符串中小数点后的数字的个数与指数的比较,当指数为正时,如果指数大于个数,那么我们需要补零。如果指数小于其个数,我们不需要补零,只需要在相应的位置加上小数点即可。
如果指数为负,我们就只需要按照指数的大小,设定小数点后0的位置,例如+1.2456E-03,我们的结果应该是0.0012456,所以小数点一定在第一个0后面,后面补上的0的个数为指数-1.
代码
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
string a="",b="";
cin>>a;
if(a[0]=='-')
{
cout<<"-";
}
long long int Ewei=0;
for(int i=1;i<a.length();i++)
{
if(a[i]=='E')
Ewei=i;
}
for(int i=Ewei+2;i<a.length();i++)
b+=a[i];
long long int zhishu=0;
//将指数的字符串转化为int整数类型
zhishu=stoi(b);
if(a[Ewei+1]=='-')
{
cout<<"0.";
for(int i=0;i<zhishu-1;i++)
cout<<"0";
cout<<a[1];
for(int i=3;i<Ewei;i++)
cout<<a[i];
}
else
{
int xiaoshu=Ewei-2;
cout<<a[1];
if(Ewei-3>zhishu)
{
for(int i=3;i<3+zhishu;i++)
cout<<a[i];
cout<<".";
for(int i=3+zhishu;i<Ewei;i++)
cout<<a[i];
}
else
{
for(int i=3;i<Ewei;i++)
cout<<a[i];
}
for(int i=0;i<=zhishu-xiaoshu;i++)
cout<<"0";
}
return 0;
}
答题用时17min
Q24——finish√