注意点:俺没有注意到个位数是1位……且可以用"%[^E]E%d"输入,要不可以省一堆压根没用的东西……但我懒得改了
我觉得这个写的很好PAT乙级1024. 科学计数法(C语言)_对方北方-CSDN博客
#include<stdio.h>
#include<stdlib.h>
int sort(char*a,int t,int p,int q);
int main(){
char a[100000];
scanf("%s",a);
int m,n,p,q;
if(a[0]=='-'){
printf("-");
}
for(m=0;a[m]!='.';m++);
for(n=m;a[n]!='E';n++);
p=m-1;
q=n-m-1;
int r,s,t;
char b[100000];
s=0;
for(r=n+1;a[r]!='\0';r++){
b[s]=a[r];
s++;
}
t=atoi(b);
int i=0;
char c[100000];
for(s=1;s<n;s++){
c[i]=a[s];
i++;
}
int sign=sort(c,t,p,q);
if(sign==1){
printf("0.");
for(i=0;i<-p-t;i++){
printf("0");
}
for(i=0;c[i]!='\0';i++){
printf("%c",c[i]);
}
}else if(sign==-1){
for(i=0;c[i]!='\0';i++){
printf("%c",c[i]);
}
for(i=0;i<t-q;i++){
printf("0");
}
}else{
for(i=0;c[i]!='\0';i++){
printf("%c",c[i]);
}
}
return 0;
}
int sort(char*a,int t,int p,int q){
int i;
if(t<=-p){
for(i=p;a[i+1]!='\0';i++){
a[i]=a[i+1];
}
a[i]='\0';
return 1;
}else if(t>=q){
for(i=p;a[i+1]!='\0';i++){
a[i]=a[i+1];
}
a[i]='\0';
return -1;
}else if(t>0){
for(i=p;i<p+t;i++){
a[i]=a[i+1];
}
a[i]='.';
return 0;
}
}