北航机试13年03题:科学计数法
题目描述:给出一个标准输入的正数(开头末尾没有多余的0),输出其科学计数法表示结果。
样例:
输入 | 输出 |
---|---|
0.000002 | 2e-6 |
123.456 | 1.23456e-2 |
123456 | 1.23456e5 |
1.0102 | 1.0102 |
10000 | 1e4 |
思路: 如果开头末尾没有多余的0,则一共有5种情况,即样例的5中情况
直接上代码
/*
北航机试13年03科学计数法:
*/
#include"stdafx.h"
#include<stdio.h>
#include<string.h>
int main(){
char a[20];
while(scanf("%s", a)!=EOF){
int size=strlen(a);
int i, j;
for(i=0;i<size;i++){
if(a[i]=='.') break;
}
if(i==1 && a[0]=='0'){ //情况:0.0002
for(j=2;j<size;j++)
if(a[j]!='0')
break;
if(j==size-1){
printf("%ce-%d\n", a[j], j-1);
}else{
printf("%c.", a[j]);
for(int k=j+1; k<size; k++)
printf("%c", a[k]);
printf("e-%d\n", j-1);
}
}else if(i==1 && a[0]!='0'){ //情况:1.002
printf("%s\n", a);
}else if(i==size){ //情况:1234500
for(j=size-1; j>0; j--){
if(a[j]!='0')
break;
}
if(j==0){
printf("%ce%d", a[0], i-1);
}else{
printf("%c.", a[0]);
for(int k=1;k<=j;k++){
printf("%c", a[k]);
}
printf("e%d\n", i-1);
}
}else{
printf("%c.", a[0]);
for(int k=1;k<size;k++)
if(k!=i){
printf("%c", a[k]);
}
printf("e%d\n", i-1);
}
}
return 0;
}