不知道语言内部到底怎么处理的,总觉得充满艺术性
#include<iostream>
#include<string>
using namespace std;
int main(){
if(cin.get()=='-')
cout<<'-';
string st;//9999位小于string::npos
getline(cin,st,'E');
int n; //9999小于INT_MAX
cin>>n;
if(n<0){ //小数点往左,左边只有一位
st="0."+string(-n-1,'0')+st;
st.erase(st.rfind('.')+st.begin());
}
else{ //小数点往右,右边有很多位
int it=st.find('.');
int m=st.size()-it-1; //m是小数点右边的数字位数
if(m<n)
st+=string(n-m,'0');
else if(m>n)
st.insert(st.begin()+it+n+1,'.');//若st.insert(st.begin()+it+n,'.');n==1就错了,看准插入位置
st.erase(st.find('.')+st.begin());
it=st.find_first_not_of("0"); //整理
if(it==string::npos)
st="0";
else if(it>1)
st.erase(st.begin(),st.begin()+it);
}
cout<<st;
return 0;}