#include <iostream>
#include <string>
using namespace std;
int main(int argc, char const *argv[])
{
string s,num;
int E_index,fre;
cin >> s;
E_index=s.find('E'); //E的下标
num=s.substr(3,E_index-3); //小数点后的数字
fre=stoi(s.substr(E_index+1)); //指数
if(s[0]=='-')
cout<<'-';
if(fre>=0) //指数大于等于0,右移
{
if(num.size()<=fre) //指数大于等于 小数点后的数字位数
{
cout<<s[1]<<num; //输出整数s[1],再输出num
for(int i=0;i<fre-num.size();i++)//如果指数大于小数的位数,则需要补(指数-小数位数)0
cout << 0; //例如+1.2345E6 先输出1 再输出2345 再补(6-4)个0
}
else //指数小于 小数点后的数字位数
cout <<s[1]<< num.substr(0,fre) << "." << num.substr(fre,num.size()-fre);
//输出整数s[1]和指数个小数位 再输出. 再输出剩余小数
//例如 +1.23456E4 先输出1 再输出指数个(4位)小数位,即2345 再输出. 最后输出其余小数6
}
else //指数小于0,左移
{
cout <<"0."; //先输出0.
for(int i=0;i<-fre-1;i++) //再补指数-1个0
cout << "0";
cout << s[1] << num; //再输出小数部分
} //例如 +1.2345E-6 先输出0. 再输出6-1个0 再输出小数部分
return 0;
}
PAT (Basic Level) Practice 1024 科学计数法 (20分)
最新推荐文章于 2024-05-16 09:42:36 发布