C++
#include <cstdio>
#include <cstring>
#include <math.h>
#include <algorithm>
#include <iostream>
using namespace std;
int main(){
string str;
string::iterator it=str.begin();
int i=0, ewei = 0, zfmark=1, sum=0, len; //zfmark==1时为正数,==0为负数。
cin >> str;
if(str[0]=='-') {
cout<<'-';
str.erase(str.begin(), str.begin()+1);
}else str.erase(str.begin(), str.begin()+1);
for(i=0; it+i!=str.end();){
if(str[i]=='E'){
ewei=1;
str.erase(str.begin()+i,str.begin()+i+1);
}
if(str[i]=='-'){
zfmark=0;
str.erase(str.begin()+i,str.begin()+i+1);
}else if(str[i]=='+') str.erase(str.begin()+i,str.begin()+i+1);
if(ewei!=0){
sum=sum*10+(str[i]-'0');
str.erase(str.begin()+i,str.begin()+i+1);
}else i++;
}
len=str.length();
if(zfmark && sum!=0){
if(str[0]!='0' ) printf("%d",str[0]-'0');
len-=2; //小数点后面部分的字符长度
for(i=1;i<=sum;i++){
if(i<=len){
printf("%c",str[1+i]);
}
else printf("0");
}
if(len>sum) { //若小数点后面部分的字符长度大于小数点移动的次数
printf(".");
for(i=len-sum;i>0;i--){
printf("%c",str[1+(++sum)]);
}
}
}else if(zfmark==0&&sum!=0){
str.erase(str.begin()+1,str.begin()+2);
printf("0.");
for(i=1;i<sum;i++){
printf("0");
}
for(it=str.begin(); it!=str.end(); it++){
printf("%c", *it);
}
}else {
for(it=str.begin(); it!=str.end(); it++){
printf("%c", *it);
}
}
return 0;
}
转载须注明出处。