※ SW expert 아카데미의 문제를 무단 복제하는 것을 금지합니다.
주어진 정수의 앞 두 자리를 유효숫자로 하여 표기하는 프로그램을 작성하세요.
예를 들어 정수 588235는 5.88235*105 인데, 앞의 소수 부분을 소수점 두 번째 자리에서 반올림하여 5.9*105로 나타내는 것입니다.
하나의 예외로, 9999 같은 경우 9.999*103에서 9.999의 소수점 두 번째 자리를 반올림하여 1.0*104으로 나타내야 합니다.
[입력]
첫 번째 줄에 테스트 케이스의 수 TC가 주어진다
이후 TC개의 테스트 케이스가 새 줄로 구분되어 주어진다.
각 테스트 케이스마다 하나의 정수 N이 주어진다. ( 102 ≤ N ≤ 10100000)
[출력]
각 테스트 케이스마다 ‘# ’( t 는 테스트케이스 번호를 의미하며 1부터 시작한다)를 출력하고,
주어진 정수의 앞 두 자리를 유효숫자로 하여 출력한다. 출력 예제의 형식을 따라 출력해야 한다.
유효숫자의 개념이므로 숫자가 아무리 길어도 앞의 3자리만 보면 된다. 뒤의 숫자는 자리수만 결정할뿐 유효숫자를 표현하는데 아무 영향을 주지 않는다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int tc;
string s;
cin>>tc;
for(int t=1;t<=tc;t++)
{
cin>>s;
if(s[2]-'0'<5)
printf("#%d %c.%c*10^%d\n",t, s[0],s[1], s.length()-1);
else if(s[2]-'0'>=5&&s[1]-'0'<9)
printf("#%d %c.%c*10^%d\n",t, s[0],s[1]+1, s.length()-1);
else if(s[1]-'0'==9&&s[2]-'0'>=5)
{
if(s[0]-'0'==9)
printf("#%d 1.0*10^%d\n",t, s.length());
else
printf("#%d %c.0*10^%d\n",t, s[0]+1, s.length()-1);
}
}
return 0;
}
|
cs |
1. 3번째 수가 5보다 작으면 올림이 일어나지 않으므로 그냥 출력 ex)624 -> 6.24*10^2
2. 3번째 수가 5보다 크고 2번째 수가 9보다 작으면 1번째 자리까지 올림이 일어나지 않으므로 2번째 수에 +1만 해서 출력 ex) 349 -> 3.5*10^2
3. 3번째 수가 5보다 크고 2번째수가 9인 경우 1번째 수까지 올림이 일어남
3-1 첫번째 자리가 9일경우
나타내는 1,2번째 숫자가 둘다 9고 3번째 자리에서 올림이 일어나는 경우.
이럴 경우 그냥 1.0 * 10^문자의 길이 -> 일반적으론 문자의 길이 -1 이지만 올림 때문에 한자리가 더 추가 됨 ex) 997-> 1.0*10^3
3-2 첫번째 자리가 9가 아니고 둘째 자리는 9인 경우 경우
1번째 자리는 1이 추가가 되고 2번째 자리는 0이 됨. ex) 899 -> 9.0 * 10^2
9778. 카드 게임 (0) | 2020.04.09 |
---|---|
9700. USB 꽂기의 미스터리 D3 (3) | 2020.03.25 |
5650. [모의 SW 역량테스트] 핀볼 게임 (0) | 2020.03.09 |
9611. 명진이와 동휘의 숫자 맞추기 D4 (0) | 2020.03.08 |
3752. 가능한 시험 점수 D4 (0) | 2020.01.18 |
댓글 영역