题目
题意: 科学计数法转化为正常的小数,a.deb输入保证d没有前导0(但d可以是0) a是0的话 b一定是0.
#include<bits/stdc++.h>
using namespace std;
const int N=200+10;
char s[N];int x[N],y[N],z[N];
int main(){
scanf("%s",s+1);int n=strlen(s+1);
int C=0,lenc=0,flag=0;
for(int i=1;i<=n;++i){
if(!flag){
if(s[i]=='e') flag=1;
continue;
}else C+=s[i]-'0',C*=10,++lenc;
}
C/=10;
int numx=0,numy=0,numz=0,flag1=0,flag2=0;//flag1是小数点前最先不是1的在numx数组的下标。
x[++numx]=s[1]-'0';
if(x[numx]) flag1=numx;
for(int i=3;i<=3+C-1;++i){//小数点前面
if(i>=n-lenc) x[++numx]=0;//多补的0
else x[++numx]=s[i]-'0';
if(!flag1&&x[numx]) flag1=numx;
}
for(int i=3+C;i<=n-lenc-1;++i){//小数点后面
y[++numy]=s[i]-'0';
if(!flag2&&y[numy]) flag2=numy;
}
if(!flag1) cout<<0;
else for(int i=flag1;i<=numx;++i) cout<<x[i];//去掉前导0
if(!flag2) return 0;
cout<<'.';
for(int i=1;i<=numy;++i) cout<<y[i];//不需要去掉后导0因为输入的b没有后导0
}