題目地址:https://pintia.cn/problem-sets/994805260223102976/problems/994805297229447168ios
科學計數法是科學家用來表示很大或很小的數字的一種方便的方法,其知足正則表達式 [+-][1-9].
[0-9]+E[+-][0-9]+,即數字的整數部分只有 1 位,小數部分至少有 1 位,該數字及其指數部分的正負號即便對正數也一定明確給出。正則表達式
現以科學計數法的格式給出實數 A,請編寫程序按普通數字表示法輸出 A,並保證全部有效位都被保留。app
每一個輸入包含 1 個測試用例,即一個以科學計數法表示的實數 A。該數字的存儲長度不超過 9999 字節,且其指數的絕對值不超過 9999。測試
對每一個測試用例,在一行中按普通數字表示法輸出 A,並保證全部有效位都被保留,包括末尾的 0。spa
+1.23400E-03
0.00123400
-1.2E+10
-12000000000
首先對輸入數據進行拆分,分爲數字主體部分和指數浮動部分,以E爲分解。code
#include <iostream> using namespace std; int main() { string number; cin >> number; // 符號E以前的部分 string partA = number.substr(0, number.find('E')); // 符號E以後的部分 string partB = number.substr(number.find('E') + 1, number.length()); // cout << partA << endl; // cout << partB << endl; // 數字部分正負符號 char partASign = partA[0]; // 指數部分正負符號 char partBSign = partB[0]; partA.erase(0, 1); partB.erase(0, 1); // 指數大小 int index = stoi(partB); // 小數點須要進行移動 if (index != 0) { // 小數點右移 if (partBSign == '+') { // 若是小數部分位數大於指數,則進行小數點移動,無需補0 if (partA.length() - 2 > index) { partA.insert(index + 2, "."); // 小數部分位數小於指數,補0 } else if (partA.length() - 2 < index) { for (int i = partA.length() - 2; i < index; i++) { partA.append("0"); } } // 若是恰好小數部分位數等於指數,則直接抹除小數點便可 // 而且移動小數點後以前的小數點也要抹除 partA.erase(1, 1); // 小數點左移 } else { partA.erase(1, 1); for (int i = 1; i < index; i++) { partA.insert(0, "0"); } partA.insert(0, "0."); } } // 若是爲+則再也不輸出 if (partASign == '+') { cout << partA << endl; } else { cout << partASign << partA << endl; } return 0; }