PAT 1024 과학 계수 법 (20 점)

제목 묘사 과학 계수 법 은 과학자 들 이 매우 크 거나 작은 숫자 를 나타 내 는 편리 한 방법 으로 정규 표현 식 [±] [1 - 9] [0 - 9] + E [±] [0 - 9] +, 즉 숫자의 정수 부분 은 1 자리 에 불과 하고 소수 부분 은 적어도 1 자리 가 있 으 며 이 숫자 와 그 지수 부분의 플러스 마이너스 번 호 는 정수 에 대해 서도 반드시 명확 하 게 제시 해 야 한다.
현재 과학 계수 법의 형식 으로 실수 A 를 드 립 니 다. 프로그램 을 작성 하여 일반 숫자 표시 법 에 따라 A 를 출력 하고 모든 유효 위 치 를 유지 하도록 하 십시오.입력 형식:
각 입력 에는 과학 계수 법 으로 표 시 된 실수 A 를 포함 하 는 테스트 용례 가 1 개 씩 포함 되 어 있다.이 숫자의 저장 길 이 는 9999 바이트 를 초과 하지 않 고 지수의 절대 치 는 9999 를 초과 하지 않 는 다.
출력 형식:
모든 테스트 용례 에 대해 한 줄 에서 일반 숫자 표시 법 에 따라 A 를 출력 하고 모든 유효 위 치 를 유지 하 며 끝의 0 을 포함 합 니 다.
입력 샘플 1:
+1.23400E-03
출력 예시 1:
0.00123400
입력 샘플 2:
-1.2E+10
출력 예시 2:
-12000000000
C + + 해법
#include 
#include 
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;
}

생각:
n. E 뒤의 문자열 에 대응 하 는 숫자 를 저장 하고 t 는 E 앞의 문자열 을 저장 하 며 기호 위 치 를 포함 하지 않 습 니 다.n < 0 시 앞으로 이동 을 표시 하면 0 을 먼저 출력 한 다음 abs (n) - 1 개 0 을 출력 한 다음 t 의 모든 숫자 를 계속 출력 합 니 다.n > 0 시 뒤로 이동 을 표시 하면 첫 번 째 문 자 를 출력 한 다음 t 에서 가능 한 한 n 개의 문 자 를 출력 합 니 다. t 가 마지막 문자 (j = = t. length () 로 출력 되 었 다 면 뒤에서 n - cnct 0 을 추가 합 니 다. 그렇지 않 으 면 소수점 을 추가 합 니 다. 그리고 t 의 나머지 출력 되 지 않 은 문 자 를 계속 출력 합 니 다.
python 해법
s = input()

loc_e = s.find('E')
if s[0] == '+':
    symbol_a = ''
else:
    symbol_a = '-'
a = s[1]+s[3:loc_e]
symbol_e = s[loc_e+1]
e = int(s[loc_e+2:])

if e == 0:
    a = s[1:loc_e]
elif symbol_e == '-':
    a = '0.'+('0'*(e-1))+a
elif symbol_e == '+':
    if e < len(a)-1:
        a = a[:e+1]+'.'+a[e+1:]
    else:
        a += (e-len(a)+1)*'0'

print(symbol_a+a)


자바 해법
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigDecimal;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String val = br.readLine();
        BigDecimal bd = new BigDecimal(val);
        System.out.println(bd.toPlainString());
    }
}

좋은 웹페이지 즐겨찾기