PAT Basic Level 1024. 과학적 계수 법 (20)

2662 단어
과학 계수 법 은 과학자 들 이 크 거나 작은 숫자 를 나타 내 는 편리 한 방법 으로 정규 표현 식 [+ -] [1 - 9] 을 만족 시 키 는 것 이다.
현재 과학 계수 법의 형식 으로 실수 A 를 드 립 니 다. 프로그램 을 작성 하여 일반 숫자 표시 법 에 따라 A 를 출력 하고 모든 유효 위 치 를 유지 하도록 하 십시오.
입력 형식:
각 입력 에는 과학 계수 법 으로 표 시 된 실수 A 를 포함 하 는 테스트 용례 가 1 개 씩 포함 되 어 있다.이 숫자의 저장 길 이 는 9999 바이트 를 초과 하지 않 고 지수의 절대 치 는 9999 를 초과 하지 않 는 다.
출력 형식:
모든 테스트 용례 에 대해 한 줄 에서 일반 숫자 표시 법 에 따라 A 를 출력 하고 모든 유효 위 치 를 유지 하 며 끝의 0 을 포함 합 니 다.
입력 샘플 1:
+1.23400E-03

출력 예시 1:
0.00123400

입력 샘플 2:
-1.2E+10

출력 예시 2:
4. 567913. 복잡 하 게 썼 고 마지막 테스트 점 은 지나 갈 수 없 었 다.
코드 는 다음 과 같 습 니 다:
-12000000000

다음은 비교적 간결 하 게 쓴 다른 코드 입 니 다.
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<string>
#include<sstream>
#include<fstream>
using namespace std;
int main()
{
#ifdef ONLINE_JUDGE
#else
    freopen("D:\\in.txt", "r", stdin);
    freopen("D:\\out.txt", "w", stdout);
#endif
    char fstr[10000];
    char c1;
    char c2;
    char c3;
    char str[10000];
    long long d1;
    int d2(0);
    string s;
    double f;
    while (cin.getline(fstr,10000))
    {
        sscanf(fstr, "%c%c.%sE%c%d", &c1, &c2, str,&c3,&d2);
        sscanf(str, "%dE%c%d", &d1, &c3, &d2);
        string ss = "";
        for (int i = 0; str[i] != 'E'; i++)
            ss += str[i];
        ss = c2 + ss;
        stringstream os;
        if (c3 == '+')
        {
            if (d2 == 0)
            {
                ss.insert(1, ".");
            }
            else if (d2 < ss.length() - 1)
            {
                ss.insert(1 + d2, ".");
            }
            else if (d2 > ss.length() - 1)
            {
                int t = ss.length();
                for (int j = 0; j < d2 + 1 -t;j++)
                    ss += '0';
            }
        }
        else
        {
            if (d2 == 0)
                ss.insert(1, ".");
            else if (d2 == 1)
            {
                ss.insert(0, ".");
                ss.insert(0, "0");
            }
            else
            {
                for (int j = 0; j < d2 - 1; j++)
                    ss = '0' + ss;
                ss = "." + ss;
                ss = '0' + ss;
            }
        }
        if (c1 == '-')
            ss = c1 + ss;
        cout << ss << endl;
    }
}

좋은 웹페이지 즐겨찾기