標籤:
科學計數法是科學家用來表示很大或很小的數位一種方便的方法,其滿足Regex[+-][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
類比地好煩......
#include<iostream>#include<sstream>#include<cmath>#include<vector>#include<string>using namespace std;int main(){ int i, j, m, n, mark, value1, k, value2; string s1, zhishu = ""; cin >> s1; if (s1[0] == ‘+‘){ for (i = 1; i < s1.length(); i++){ if (s1[i] == ‘E‘){ mark = i; break; } } for (j = mark + 2; j < s1.length(); j++) { zhishu = zhishu + s1[j]; } value1 = atoi(zhishu.c_str()); if (s1[mark+1] == ‘-‘){ cout << 0 << "."; value1--; while (value1){ cout << 0; value1--; } for (m = 1; m < mark; m++){ if (m != 2){ cout << s1[m]; } } } else if (s1[mark+1] == ‘+‘){ if (value1 < mark - 3) { for (int l = 1; l < mark; l++){ if (l != 2){ if (l - 2 == value1){ cout << s1[l] << "."; } else{ cout << s1[l]; } } } } else if (value1 >= mark - 3) { for (n = 1; n < mark; n++){ if (n != 2){ cout << s1[n]; } } for (m = 0; m < value1 + 3 - mark; m++){ cout << 0; } } } } if (s1[0] == ‘-‘){ for (i = 1; i < s1.length(); i++){ if (s1[i] == ‘E‘){ mark = i; break; } } for (j = mark + 2; j < s1.length(); j++) { zhishu = zhishu + s1[j]; } value2 = atoi(zhishu.c_str()); if (s1[mark+1] == ‘-‘){ cout << "-" << 0 << "."; value2--; while (value2){ cout << 0; value2--; } for (n = 1; n < mark; n++){ if (n != 2){ cout << s1[n]; } } } else if (s1[mark+1] == ‘+‘){ cout << "-"; if (value2 >= mark - 3) { for (n = 1; n < mark; n++){ if (n != 2){ cout << s1[n]; } } for (m = 0; m < value2 + 3 - mark; m++){ cout << 0; } } else if (value2 < mark - 3){ for (n = 1; n < mark; n++){ if (n != 2){ if (n - 2 == value2){ cout << s1[n] << "."; } else{ cout << s1[n]; } } } } } } return 0;}CAPOUIS‘CODE
PAT-BASIC-1024-科學計數法