题255.pat甲级练习-1073 Scientific Notation (20 分)
一、题目
二、题解
#include <bits/stdc++.h>
using namespace std;
int main()
{
string A;
cin>>A;
int sign=1;
if(A[0]=='-')
{
sign=-sign;
}
int posE=A.find('E');
string exp=A.substr(posE+1,A.length()-posE-1);
int movestep=stoi(exp);
int posPoint=A.find('.');
string res="";
if(movestep<0)
{
if(sign<0)
{
res+='-';
}
res+="0.";
movestep++;
while(movestep!=0)
{
res+='0';
movestep++;
}
for(int i=1; i<posE; i++)
{
if(A[i]!='.')
{
res+=A[i];
}
}
}
else//小数点右移
{
if(sign<0)
{
res+='-';
}
res+=A[1];//开局先把小数点前那一位数放入
if(movestep==0)//如果不需要移动小数点,题目貌似不考虑这个
{
//ifelse可以不写的,但为了凸显特点还是写这里了
}
else
{
int i;
for(i=3; i<posE&&movestep!=0; i++)//从小数点之后那一位数开始考虑
{
res+=A[i];
movestep--;
}
if(movestep==0)//当右移全部结束
{
if(i<posE)//如果E之前的数全部用完,则不用添加小数点(测试点2,3),否则要
{
res+='.';
}
for(; i<posE; i++)//补E之前的数
{
res+=A[i];
}
}
else
{
while(movestep!=0)//E前的数都用完了还是没凑够移动步数则补零
{
res+='0';
movestep--;
}
}
}
}
cout<<res<<endl;
}