#include <iostream>
#include<string>
using namespace std;
int main()
{
string a;
cin>>a;
int len=a.length();
int flag=1;
int t=a.find("+",1);
if(t==a.npos)
{
flag=0;
t=a.find("-",1);
}
int tt=a.find(".",0);
int flag1=1;
if(tt==a.npos)
{
flag1=0;
}
int b=1;
int c=0;
for(int i=0;i<(len-t-1);i++)
{
c+=(a[len-i-1]-48)*b;
b=b*10;
}
if(a[0]=='-'&&a[1]=='0'&&a[2]=='E')
{
cout<<"0";
}
else if(flag==0&&flag1==1)
{
if(a[0]=='-')
{
cout<<"-";
}
cout<<"0.";
for(int j1=0;j1<c-1;j1++)
{
cout<<"0";
}
cout<<a[1];
for(int j2=3;j2<t-1;j2++)
{
cout<<a[j2];
}
}
else if(flag==1&&flag1==1)
{
if(a[0]=='-')
{
cout<<"-";
}
if(c>t-4)
{
cout<<a[1];
for(int j3=3;j3<t-1;j3++)
{
cout<<a[j3];
}
for(int j4=0;j4<c-t+4;j4++)
{
cout<<"0";
}
}
else if(c<t-5)
{
cout<<a[1];
for(int j5=0;j5<c;j5++)
{
cout<<a[j5+3];
}
cout<<".";
for(int j6=c+4;j6<t-1;j6++)
{
cout<<a[j6];
}
}
else if(c==t-4)
{
cout<<a[1];
for(int j5=0;j5<c;j5++)
{
cout<<a[j5+3];
}
}
}
else if(flag==1&&flag1==0)
{
if(a[0]=='-')
{
cout<<"-";
}
cout<<a[1];
for(int j7=0;j7<c;j7++)
{
cout<<"0";
}
}
else if(flag==0&&flag1==0)
{
if(a[0]=='-')
{
cout<<"-";
}
cout<<"0."<<a[1];
for(int j8=0;j8<c-1;j8++)
{
cout<<"0";
}
}
return 0;
}
别人:
分析:
本题处理起来确实麻烦,但你是不需要字符串函数来处理的。首先你需要找到E的位置,从E的位置+1往后计算指数大小EX,EX就表示需要在小数部分前或后加EX个0,然后判断第1个字符是不是负号,是则输出。再判定EX即0的长度是否为0,如果为0则输出从1开始到E之前位置的字符即可,如果EX不为0,则有如下两种情况:
1.EX>0
首先输出整数部分,然后需要判定小数部分长度和EX的大小,又分两种情况:
1.1 EX<小数部分长度
输出下标从3即小数部分第1个数字的位置开始EX个长度的字符,如果用for循环输出,假设循环变量为j,EX也即0的长度为len0,则条件为j=3,j<3+len0,j++,注意,3+len0不要写成j=j+len0!否则j的上限不断变化,到时候可能会越界!然后输出小数点,再输出小数点到E之间的部分,注意循环变量的初始值为3+len0
1.2 EX>=小数部分长度
先输出从下标3开始到E的部分,假设小数部分长度为D,则输出EX-D个长度的0
2.EX<0
先输出0和小数点,再输出EX-1长度的0,再输出原整数部分即第2个字符,再输出下标从3开始到E的部分
#include <iostream>
#include<string>
using namespace std;
int main()
{
string a;
cin>>a;
int len=a.length();
int flag=1;
int t=a.find("+",1);
if(t==a.npos)
{
flag=0;
t=a.find("-",1);
}
int tt=a.find(".",0);
int flag1=1;
if(tt==a.npos)
{
flag1=0;
}
int b=1;
int c=0;
for(int i=0;i<(len-t-1);i++)
{
c+=(a[len-i-1]-48)*b;
b=b*10;
}
if(a[0]=='-'&&a[1]=='0'&&a[2]=='E')
{
cout<<"0";
}
else if(flag==0&&flag1==1)
{
if(a[0]=='-')
{
cout<<"-";
}
cout<<"0.";
for(int j1=0;j1<c-1;j1++)
{
cout<<"0";
}
cout<<a[1];
for(int j2=3;j2<t-1;j2++)
{
cout<<a[j2];
}
}
else if(flag==1&&flag1==1)
{
if(a[0]=='-')
{
cout<<"-";
}
if(c>t-4)
{
cout<<a[1];
for(int j3=3;j3<t-1;j3++)
{
cout<<a[j3];
}
for(int j4=0;j4<c-t+4;j4++)
{
cout<<"0";
}
}
else if(c<t-5)
{
cout<<a[1];
for(int j5=0;j5<c;j5++)
{
cout<<a[j5+3];
}
cout<<".";
for(int j6=c+4;j6<t-1;j6++)
{
cout<<a[j6];
}
}
else if(c==t-4)
{
cout<<a[1];
for(int j5=0;j5<c;j5++)
{
cout<<a[j5+3];
}
}
}
else if(flag==1&&flag1==0)
{
if(a[0]=='-')
{
cout<<"-";
}
cout<<a[1];
for(int j7=0;j7<c;j7++)
{
cout<<"0";
}
}
else if(flag==0&&flag1==0)
{
if(a[0]=='-')
{
cout<<"-";
}
cout<<"0."<<a[1];
for(int j8=0;j8<c-1;j8++)
{
cout<<"0";
}
}
return 0;
}