問題
http://codeforces.com/contest/697/problem/B
「a.deb」形式として、整数 a 実数 d 自然数 b が与えられるとき、
a.d * 10^b を出力せよ。
0 <= a <= 9
0 <= d < 10^100
0 <= b <= 100
考察
1. 10^100なので文字列として扱えば良さそう
2. aとdをそのままくっつけると、aは1桁で決まっているので、0番目と1番目の間にコンマが来る
3. あとは、そのコンマを b だけ右に移動させる
4. 先頭や末尾の0や小数以下が無いときにコンマを消せば答え
実装
http://codeforces.com/contest/697/submission/19125229
string s; //----------------------------------------------------------------- string a; string d; int b; void parse() { int id = s.find("."); a = s.substr(0, id); int ie = s.find("e"); d = s.substr(id + 1, ie - id - 1); b = 0; rep(i, ie + 1, s.length()) b = b * 10 + (s[i] - '0'); } //----------------------------------------------------------------- #define rrep(i,a,b) for(int i=a;i>=b;i--) string zeroclear(string x) { int l = 0; rep(i, 0, x.length()) { if (x[i] == '0') l = i + 1; else break; } int r = x.length() - 1; rrep(i, x.length() - 1, 0) { if (x[i] == '0') r = i - 1; else break; } return x.substr(l, r - l + 1); } //----------------------------------------------------------------- int main() { while (cin >> s) { parse(); /*cout << a << endl; cout << d << endl; cout << b << endl;*/ if (d.length() < b) { int dif = b - d.length(); rep(i, 0, dif) d = d + "0"; } string ad = a + d; string ans = ""; rep(i, 0, ad.length()) { ans += ad[i]; if (i == b) ans += "."; } //cout << ans << endl;// ans = zeroclear(ans); if (ans[0] == '.') ans = "0" + ans; if (ans[ans.length() - 1] == '.') ans = ans.substr(0, ans.length() - 1); cout << ans << endl; } }