首页 > 代码库 > CodeForces #362 div2 B. Barnicle

CodeForces #362 div2 B. Barnicle

 题目链接: B. Barnicle

题意:给出科学计数法 转化成十进制的整数或小数 并输出。

思路:暑假训练赛见过了,当时大腿A掉了,并表示是道水题。

   刷CF再次遇见,毫不留情WA了几次。比如:

        0.e0       0

        1.0e0     1

   突然觉得自己不能再依赖CF这种看着sample dbug的模式了。

附代码:

/// 给出科学计数法 转化成十进制的整数或小数 并输出#include <stdio.h>#include <string.h>#include <iostream>using namespace std;string str;int main() {    //freopen("in.cpp", "r", stdin);    while(cin >> str) {        string ans = "";        int len = str.length();        int lose;        for (int i=len-1; i>=0; --i) {            if (str[i] == ‘e‘) {                lose = i;                break;            }        }        int a = str[0] - ‘0‘;        if (a == 0) {            int endd = 0;            for (int i=lose-1; i>=0; --i){                if (str[i] > ‘0‘ && str[i] <= ‘9‘) {                    endd = i;                    break;                }            }            str.resize(endd+1);            cout << str << endl;            continue;        }        ans += str[0];        int b = 0;        for (int i=lose+1; i<len; ++i) {            b = b*10 + str[i]-‘0‘;        }        int cnt1 = 0;        bool first = false; //        for (int i=2; i<lose; ++i) {            if (cnt1 < b) {                ans += str[i];            }            else {                if (first == false) {                    first = true;                    ans += ‘.‘;                }                ans += str[i];            }            cnt1++;        }        while(cnt1 < b) {            ans += ‘0‘;            cnt1++;        }        if (ans[1] == ‘.‘) {            int anslen = ans.length();            bool ok = false;            for (int i=2; i<anslen; ++i) {                if (ans[i] > ‘0‘ && ans[i] <= ‘9‘) {                    ok = true;                    break;                }            }            if (!ok) ans.resize(1);        }        cout << ans << endl;    }    return 0;}

CodeForces #362 div2 B. Barnicle