1024 科學計數法 20分

2021-10-03 16:13:50 字數 1597 閱讀 4707

科學計數法是科學家用來表示很大或很小的數字的一種方便的方法,其滿足正規表示式 [±][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位後如果沒有數值了就不加小數點了 的意思是 ...