題目:
科學計數法是科學家用來表示很大或很小的數字的一種方便的方法,其滿足正規表示式 [±][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,並保證所有有效位都...