JNUOJ 1184 - 科学计数法-LMLPHP

JNUOJ 1184 - 科学计数法-LMLPHP

花了半个小时,强行拗出一长串又臭又长的代码,把所有情况都分了(该分的,不该分的……都分了……)

 #include<cstdio>
#include<cstring>
#include<cmath>
#define MAX 120
char num[MAX],d[MAX],b_[],b;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%s",num);
if(num[]=='')
{
int i,cnt;
for(i=,cnt=;;i++,cnt++)
{
if(num[i]=='e') break;
d[cnt]=num[i];
}
d[cnt]='\0';
i++;
for(cnt=;num[i];i++,cnt++) b_[cnt]=num[i];
b_[cnt]='\0';
int len_b=strlen(b_);
b=;
for(i=;i<len_b;i++) b+=(b_[i]-'')*(int)pow(,(len_b--i));
int len_d=strlen(d);
if(len_d== && d[]=='')//这个数是0
{
printf("0\n");
}
else if(b<len_d)//不需要添加后缀0,需要移动小数点,并去掉前缀0
{
int d_0=;
for(i=;i<len_d;i++)
{
if(d[i]!='') break;
if(d[i]=='') d_0++;
}//前缀0个数
if(b<=d_0)//b <= d的前缀0个数,n<1
{
printf("0.");
for(i=b;i<len_d;i++) printf("%c",d[i]);
printf("\n");
}
else//b > d的前缀0个数,n>=1
{
for(i=d_0;i<b;i++) printf("%c",d[i]);
printf(".");
for(;i<len_d;i++) printf("%c",d[i]);
printf("\n");
}
}
else if(b==len_d)//直接去掉小数点,并去掉前缀0
{
for(i=;i<len_d;i++) if(d[i]!='') break;
for(;i<len_d;i++) printf("%c",d[i]);
printf("\n");
}
else//需要添加后缀0,并且去掉前缀0
{
for(i=;i<len_d;i++) if(d[i]!='') break;
for(;i<len_d;i++) printf("%c",d[i]);
for(i=;i<=b-len_d;i++) printf("");
printf("\n");
}
}
else
{
int i,cnt;
for(i=,cnt=;;i++,cnt++)
{
if(num[i]=='e') break;
d[cnt]=num[i];
}
d[cnt]='\0';
i++;
for(cnt=;num[i];i++,cnt++) b_[cnt]=num[i];
b_[cnt]='\0';
int len_b=strlen(b_);
b=;
for(i=;i<len_b;i++) b+=(b_[i]-'')*(int)pow(,(len_b--i));
int len_d=strlen(d);
if(b<len_d)//不需要添加0,需要移动小数点
{
printf("%c",num[]);
for(i=;i<b;i++) printf("%c",d[i]);
printf(".");
for(;i<len_d;i++) printf("%c",d[i]);
printf("\n");
}
else if(b==len_d)//直接去掉小数点
{
printf("%c",num[]);
for(i=;i<len_d;i++) printf("%c",d[i]);
printf("\n");
}
else//需要添加后缀0
{
printf("%c",num[]);
for(i=;i<len_d;i++) printf("%c",d[i]);
for(i=;i<=b-len_d;i++) printf("");
printf("\n");
}
}
}
}
04-26 23:28