科學計數法是科學家用來表示很大或很小的數字的一種方便的方法,其滿足正規表示式 [±][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
將採用科學計數法的數az轉化為普通形式的數字。
(1)首先確定小數點的位置lc_d和字母e的位置lc_e,lc_e+1即為指數的正負,lc_e+2到字串結尾len-1組成的數即為指數大小,將其轉化為指數pointer;
(2)字串第一位是勝負號,若是負號則輸出負號,若是正號,則不輸出。決定轉化後的普通形式數的方向的指數的正負:
1.若指數為正,小數點需要後移,有兩種情況:指數大小大於等於小數點與e之間的元素個數,則不需要輸出小數點並且需要在有效數字後繼續補0;指數大小小於小數點與e之間數字個數,則小數點需要向後移動pointer個位置,先輸出小數點之前的數字,再輸出小數點後pointer個數字,輸出小數點,再輸出剩下的數字;
2.若指數為負,小數點需要向前移,小數點需要向前移動pointer個位置,由於原先小數點之前已有一位數字,剩下的pointer-1位需要補0,並在開始的時候輸出「0.」,然後輸出字串中所有數字即可。
**如下:
#include
#include
intmain()
}for
(int i=
1;iint less=lc_e-lc_d-1;
//e和.之間的元素個數
for(
int i=lc_e+
2;i(pointer==0)
}if(str[0]
=='-'
)printf
("-");
if(str[lc_e+1]
=='+')}
while
(less}else
for(
int i=lc_d+
1;i<=lc_d+pointer;i++
)printf
(".");
for(
int i=lc_d+pointer+
1;i}else
for(
int i=
1;i}return0;
}
1、以防萬一,需要對指數大小為0的情況進行特判;
2、可以試試幾個易錯的資料進行測試:+3.1415e+004、-3.1415926e+4。
3、其實也可以不用確定小數點的位置,只需知道e的位置和指數的正負與大小即可。
1024 科學計數法 (20 分)
科學計數法是科學家用來表示很大或很小的數字的一種方便的方法,其滿足正規表示式 1 9 0 9 e 0 9 即數字的整數部分只有 1 位,小數部分至少有 1 位,該數字及其指數部分的正負號即使對正數也必定明確給出。現以科學計數法的格式給出實數 a,請編寫程式按普通數字表示法輸出 a,並保證所有有效位都...
1024 科學計數法 (20 分)
1024 科學計數法 20 分 科學計數法是科學家用來表示很大或很小的數字的一種方便的方法,其滿足正規表示式 1 9 0 9 e 0 9 即數字的整數部分只有 1 位,小數部分至少有 1 位,該數字及其指數部分的正負號即使對正數也必定明確給出。現以科學計數法的格式給出實數 a,請編寫程式按普通數字表...
1024 科學計數法 (20 分)
1.指數小於0 例 1.23e 3,轉為普通數字 0.00123,指數為3,則小數點後帶2個0,規律如下 設指數為e,小數點後就有e 1個0。2.指數大於等於0 這個又可以分成兩個情況 這個在乙個迴圈內就能解決 小數點後移e位,e位前如果沒有數值就補0,e位後如果沒有數值了就不加小數點了 的意思是 ...