题目连接:https://pintia.cn/problem-sets/994805260223102976/problems/994805297229447168
注意事项:
数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指数部分的正负号即使对正数也必定明确给出。
代码:
#include<stdio.h>
#include<string.h>
char s[15000],r1[1],r2[10008],loc; //数组r1用于存储原有的整数位,数组r2用于存储原有的小数位
int change=0;
void backward(int l)
{
int u=0;
printf("%s",r1);
if(l<=change)
{
printf("%s",r2);
for(int i=0;i<(change-l);i++)printf("0");
}
else
{
for(int i=0;i<l;i++)
{
if(i==change)printf(".");
printf("%c",r2[i]);
}
}
return;
}
void forward(int l)
{
printf("0.");
for(int i=0;i<(change-1);i++)printf("0");
printf("%s%s",r1,r2);
return;
}
int main()
{
scanf("%s",s);
int e=0,i=0,p=0,k=0,l=0;
r1[0]=s[1];
for(i=1;i<strlen(s);i++)
{
if(s[i]=='E'){e=i;break;}
if(s[i]=='.'){p=1;continue;}
if(p==1){r2[l]=s[i];l++;}
}
i=e+2;
for(i;i<strlen(s);i++)
{
change*=10;
change+=(s[i]-'0');
}
if(s[0]=='-')printf("%c",s[0]);
if(s[e+1]=='+')backward(l); //小数点后退,即整数位增加
else if(s[e+1]=='-')forward(l); //小数点前进,即整数位减少
printf("\n");
return 0;
}