思路
找到E和"."的位置
确定小数点是右移还是左移
根据移动的位数与小数点后数字的位数的不同情况分别处理
实现的比较繁琐。。。。以后再想简单的方法吧
实现
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int main(int argc, char** argv) {
string input,output="";
char direct;
string move="";
int movestep=0;
cin>>input;
int len=strlen(input.c_str());
string head="";
if(input[0]=='-')
head.append("-");
int i,dot,Epos;
for(i=1;input[i]!='-'&&input[i]!='+';i++)
{
if(input[i]=='.'||input[i]=='E')
{
if(input[i]=='.')
dot=i;
if(input[i]=='E')
Epos=i;
continue;
}
output.append(to_string(input[i]-'0'));
}
direct=input[i];
for(i+=1;i<len;i++)
{
move.append(to_string(input[i]-'0'));
}
sscanf(move.c_str(),"%d",&movestep);
if(direct=='+')
{
int j=0;
if(movestep>(Epos-dot-1))
{
int m=movestep-(Epos-dot-1);
while(m--)
output.append("0");
head.append(output);
}
else
{
string out="";
int m;
for(m=0;m<=movestep;m++)
{
out.append(to_string(output[m]-'0'));
}
if(movestep!=(Epos-dot-1))
out.append(".");
for(m;m<strlen(output.c_str());m++)
out.append(to_string(output[m]-'0'));
head.append(out);
}
}
else
{
head.append("0.");
movestep-=1;
while(movestep--)
head.append("0");
head.append(output);
}
cout<<head;
return 0;
}