原文:我的個人博客
原題鏈接
思路
簡單的字符串操作。不過要細心一點。n保存E後面的字符串所對應的數字,t保存E前面的字符串,不包括符號位。當n小於0時表示向前移動,那麼先輸出0. 然後輸出abs(n)-1個0,然後繼續輸出t中的所有數字;當n>0時候表示向後移動,那麼先輸出第一個字符,然後將t中儘可能輸出n個字符,如果t已經輸出到最後一個字符(j == t.length())那麼就在後面補n-cnt個0,否則就補充一個小數點。 然後繼續輸出t剩餘的沒有輸出的字符~
代碼
#include <iostream>
using namespace std;
int main() {
string s;
cin >> s;
int i = 0;
while (s[i] != 'E') i++;
string t = s.substr(1, i-1);
int n = stoi(s.substr(i+1));
if (s[0] == '-') cout << "-";
if (n < 0) {
cout << "0.";
for (int j = 0; j < abs(n) - 1; j++) cout << '0';
for (int j = 0; j < t.length(); j++)
if (t[j] != '.') cout << t[j];
} else {
cout << t[0];
int cnt, j;
for (j = 2, cnt = 0; j < t.length() && cnt < n; j++, cnt++) cout << t[j];
if (j == t.length()) {
for (int k = 0; k < n - cnt; k++) cout << '0';
} else {
cout << '.';
for (int k = j; k < t.length(); k++) cout << t[k];
}
}
return 0;
}