PAT 1024 과학 계수 법 (20 점)
17178 단어 PAT 문제 풀이 노트
현재 과학 계수 법의 형식 으로 실수 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());
}
}