배고픈상어-효묘
대표칭호 없음
분명 맞는거같은데 왜이럴까요..?
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include<iostream> using namespace std;; int _pow(int x, int e) { if (e == 0) return 1; return x * _pow(x, e - 1); } void convert_prt(int _x) { int x = _x; int sum = 0; int i = 0; while (x != 0) { int n = x % 10; sum += n * _pow(8, i++); x /= 10; } x = sum; int k = 1 << 30; bool isStart = false; while (k != 0) { if ((k&x) != 0) { isStart = true; printf("1"); } else if (isStart) { printf("0"); } k = k >> 1; } return; } int main() { int oct; scanf("%d",&oct); if (oct == 0) { printf("0"); } convert_prt(oct); return 0; }
Kramnik
2020.04.10적당히 큰 수에서는 좋은 방법임은 틀림없습니다. 다만, 문제의 조건 "첫째 줄에 8진수가 주어진다. 주어지는 수의 길이는 333,334을 넘지 않는다." 에서 알 수 있듯, 8진수 30만자리의 수라면 10진수로 변환하여 푸는 것은 특정한 입력에서는 어려울 수도 있겠네요. (이용하시는 c++에서는 반드시 overflow가 발생하게 됩니다)
한자리씩 읽어서 8진수 -> 2진수로 바꾸어 세 자리씩 출력하고, 첫 번째 인식은 1로 시작하게 하면 overflow를 피할 수 있습니다.
건승을 빕니다.
=============
다시 보니 입력에서도 overflow가 발생하겠군요. 인식도 문자 각각에 대해 하시는 것이 좋겠습니다.
Kramnik
2020.04.10해당 문제에 대한 예시답안입니다.
우섭
2020.05.05와! 백준나왔다!