这题想了好久,还是没有相出简单的方法,只能用最笨的方法了:
思路:
1.用字符串接收科学计数法数值
2.将整数及小数部分存到另一个字符串
3.判断指数为正还是为负
4.输出特殊情况(指数为0)
5.判断特殊情况(数字串长度大于指数)
#include
using namespace std;
// [+-][1-9].[0-9]+E[+-][0-9]+
//截取指定下标及之后的字符串
string subString(string s,int start,int end){
string temp="";
for(int i=start;i<end;i++){
temp+=s[i];
}
return temp;
}
//查找字符在字符串中的下标
int getIndex(string s,int start,char c){
for(int i=start;i<s.length();i++){
if(s[i]==c){
return i;
}
}
return -1;
}
//将字符串转换为int型数据
int toInt(string s){
int temp=0;
int mul=1;
for(int i=s.length()-1;i>=0;i--){
temp+=mul*(s[i]-'0');
mul*=10;
}
return temp;
}
int main(){
string str="";//用来存字符
string s="";
cin>>s;
if(s[0]=='-') cout<<"-";
str+=s[1];
s=subString(s,3,s.length());//去除小数点及之前的字符
str+=subString(s,0,getIndex(s,0,'E'));//将小数点之前E之后的数字添加到字符串里
s=subString(s,getIndex(s,0,'E')+1,s.length());//去掉E及前面的字符
char flag=s[0];//指数的符号
s=subString(s,1,s.length());//去掉指数的符号
int zhishu=toInt(s);
if(flag=='-'){//指数的符号为负号
if(zhishu==0){
cout<<str[0]<<"."<<subString(str,1,str.length());
return 0;
}
zhishu-=1;
cout<<"0.";
for(int i=0;i<zhishu;i++) cout<<0;
cout<<str;
}else{
if(zhishu==0){
cout<<str[0]<<"."<<subString(str,1,str.length());
return 0;
}
zhishu+=1;
for(int i=0;i<zhishu;i++){
if(i<str.length())cout<<str[i];
else cout<<"0";
}
if(zhishu<str.length()){
cout<<".";
for(int i=zhishu;i<str.length();i++){
cout<<str[i];
}
}
}
return 0;
}