PAT乙級1024 科學計數法(最初級解法)

2021-09-27 07:14:21 字數 1318 閱讀 6949

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

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

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

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

+1.23400e-03
0.00123400
-1.2e+10
-12000000000
科學計數法無非就是根據給的指數移動小數點位置,因此抓住這一點,問題就很容易解決。將輸入以字元陣列的形式輸入,先找到輸入中的e的位置,進而找到指數及其正負號,然後此時根據正負號左移或者右移小數點位置即可,左移即前面補0。右移時兩種情況,一是小數點後面的數字位數大於指數(記為p),此時只需將小數點後p位的數字輸出,然後輸出小數點,接著再輸出後面未輸出的數字;二是小數點後面的數字位數小於指數,此時在輸出這些數字的同時還需要在最後補0,直至小數點後面夠p位數字。基於上述思想,有以下**。

#include#includeusing namespace std;

void getsciencenumber(char str,int n);

void printnumber(char str,char op,int pow,int len);

int main()

void getsciencenumber(char str,int n)

} for(int j = i+2;jchar op = str[i+1];//符號

printnumber(str,op,pow,n);

}void printnumber(char str,char op,int pow,int len)

if(op == '+')//小數點右移

if(cnt<=pow)

}else if(str[i] != 'e')

}cout<}

else if(op == '-')//小數點左移

for(int i = 1;str[i]!='e';i++)

}cout<} }

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,並保證所有有效位都...