北航上机复试13真题

来源:互联网 发布:口红保质期 知乎 编辑:程序博客网 时间:2024/04/29 14:42

给出一个标准输入的正数(开头末尾没有多余的0),输出其科学计数法表示结果。比如:输入0.000002,输出2e-6;输入123.456,输出1.23456e2;输入123456,输出1.23456e2

解题:

首先将其放入到Char数组中,找到loc即为小数点所在位数,和first 即为第一位非零数的位置。然后分两种情况输出,大于1和小于1的两种情况;大于一是10的指数是loc - first-1;

小于一的10的指数是loc - first; 注意要判断一下是否要输出“.”,因为当first == 总长-1 不用输出“.”

#include <cstdio>#include <string.h>#define maxn 105int main(){    char s[maxn] ;    while ( scanf("%s",s) )    {        int loc = 0 ;        for ( int i = 0 ; i < strlen(s) ; i ++ )        {            if( s[i] == '.')            {                loc = i;                break;            }        }        int first = 0;        for ( int i = 0 ; i < strlen(s) ; i++)        {            if(s[i] != '0'&&s[i] !='.')            {                first = i ;                break;            }        }        if ( loc > first ){            printf("%c",s[first]);            if(first != strlen(s)- 1)                printf(".");            for( int i = first + 1 ; i < loc ; i ++   )                printf("%c",s[i]);            for ( int i = loc + 1 ; i < strlen(s) ; i ++ )                printf("%c",s[i]);            printf("e%d\n",loc - first - 1);        }        else {            printf("%c",s[first]);            if(first != strlen(s)- 1)                printf(".");            for ( int i = first + 1; i < strlen(s) ; i++ )                printf("%c",s[i]);            printf("e%d\n",loc - first);        }    }    return 0 ;}


0 0