北航计算机机试13科学计数法
给出一个标准输入的正数(开头末尾没有多余的0),输出其科学计数法表示结果。比如:输入0.000002,输出2e-6;输入123.456,输出1.23456e2;输入123456,输出1.23456e2
#include<stdio.h>
#include<string.h>
#define N 100
//某一步走不动的时候,change the way of yourself
int main()
{
while(1)
{
char num[N];
fgets(num,sizeof(num),stdin);
int len=strlen(num);
int point=0;
for(int i=0;i<len;i++)
{
if(num[i]=='.')
{
point=i;
break;
}
point=len-1;
}
int first=0;
for(int j=0;j<len;j++)
{
if(num[j]!='0' && num[j]!='.')
{
first=j;
break;
}
}
if(point<first)//小于1
{
if(first==(len-2)) printf("%ce%d\n",num[first],1-first);
else{
num[first-1]=num[first];
num[first]='.';
for(int i=first-1;i<len-1;i++)
{
printf("%c",num[i]);
}
printf("e%d\n",1-first);
}
}
else{//大于1
if(point==1)
{
for(int i=0;i<len-1;i++)
{
printf("%c",num[i]);
}
printf("e0\n");
}
else{
for(int j=0;j<len-1;j++)
{
if(j==0) printf("%c.",num[j]);
else if(j==point) continue;
else printf("%c",num[j]);
}
printf("e%d\n",point-1);
}
}
}
return 0;
}
借鉴大神的思路,把数字以字符串形式存储,
思路重点:当小数点的位数比第一个非零数的位数小的时候,说明是小于1的小数,反之大于1