PAT 乙級 1024 科學計數法 C語言)

2021-10-02 15:15:26 字數 1687 閱讀 7811

題目:

科學計數法是科學家用來表示很大或很小的數字的一種方便的方法,其滿足正規表示式 [±][1-9].[0-9]+e[±][0-9]+,即數字的整數部分只有 1 位,小數部分至少有 1 位,該數字及其指數部分的正負號即使對正數也必定明確給出。

現以科學計數法的格式給出實數 a,請編寫程式按普通數字表示法輸出 a,並保證所有有效位都被保留。

輸入格式:

每個輸入包含 1 個測試用例,即乙個以科學計數法表示的實數 a。該數字的儲存長度不超過 9999 位元組,且其指數的絕對值不超過 9999。

輸出格式:

對每個測試用例,在一行中按普通數字表示法輸出 a,並保證所有有效位都被保留,包括末尾的 0。

輸入樣例 1:

+1.23400e-03

輸出樣例 1:

0.00123400

輸入樣例 2:

-1.2e+10

輸出樣例 2:

-12000000000

分析:

正數的輸出形式是不帶正號的

形如+1.23456e+2的情況容易考慮不到

字串長度應設定合適

基本思路:數字以字串的形式儲存,以『e』為分界,分別提取係數與指數部分,通過指數部分得出小數點的移動步數,結合指數部分的正負號,向左或向右移動字元,並適當添零。

程式:

#include

#include

void

converttonormal

(char

*numbera)

;int

main()

else

printf

("%s"

, numbera)

;return0;

}void

converttonormal

(char

*numbera)

numbera[

++i]

= c;

c =getchar()

; sign =

(c ==

'+')?1

:0;while

((c =

getchar()

)!='\n'

)/*跳過『0』字元*/

for(indexstart =

0; index[indexstart]

=='0'

; indexstart++);

while

(indexstart < j)

if(movement ==0)

if(sign ==1)

else}if

(numbera[j+1]

!='e'

)else

}else

numbera[

2+ movement]

= numbera[

1+ movement]

; 係數首位賦值到小數點位置處

for(j =

1; j <=

1+ movement; j++

) numbera[2]

='.'

; numbera[i + movement]

='\0';}

}

PAT 乙級1024 科學計數法

科學計數法是科學家用來表示很大或很小的數字的一種方便的方法,其滿足正規表示式 1 9 0 9 e 0 9 即數字的整數部分只有 1 位,小數部分至少有 1 位,該數字及其指數部分的正負號即使對正數也必定明確給出。現以科學計數法的格式給出實數 a,請編寫程式按普通數字表示法輸出 a,並保證所有有效位都...

PAT 乙級 1024 科學計數法

科學計數法是科學家用來表示很大或很小的數字的一種方便的方法,其滿足正規表示式 1 9 0 9 e 0 9 即數字的整數部分只有 1 位,小數部分至少有 1 位,該數字及其指數部分的正負號即使對正數也必定明確給出。現以科學計數法的格式給出實數 a,請編寫程式按普通數字表示法輸出 a,並保證所有有效位都...

PAT 乙級1024 科學計數法

科學計數法是科學家用來表示很大或很小的數字的一種方便的方法,其滿足正規表示式 1 9 0 9 e 0 9 即數字的整數部分只有 1 位,小數部分至少有 1 位,該數字及其指數部分的正負號即使對正數也必定明確給出。現以科學計數法的格式給出實數 a,請編寫程式按普通數字表示法輸出 a,並保證所有有效位都...