天天看點

北航上機複試13真題

給出一個标準輸入的正數(開頭末尾沒有多餘的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 105

int 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 ;

}