문제

풀이

정답이 될 수 있는 가장 작은 숫자는 input - input의자릿수 * 9 즉 n의 자리가 모두 9가 될때 최소가 된다. 그리고 가장 큰 수는 input 자체이다.

step1. input의 자릿수 구하기

나는 다음과 같은 방법으로 자릿수와 가장큰 자릿수 (ex- 333d의 가장 큰 자릿수는 100) 를 구했다.

int i(가장 큰 자릿수) = 1000000

int num(자릿 수) = 7

while(input/i==0){ //input / i가 0 이 되었다는 말은 i가 여전히 큼을 의미한다.

i=i/10;
num = num-1;

}

step2. 가장 작은 후보부터 가장 큰 후보까지 반복문을 돌리며 각 그 수와 각자리수의 합이 input과 동일한 수가 됨을 확인하여 본다.

int result = input - num * 9;
int result2 = result; //input과 비교할 값이다.
int result3;  //중간에 계산을 위해 필요한 값이다.

while(result2!=input && result <= input){

result2 = result;
result3 = result;

for(result3 = result; result3 ; result3/=10){
    result2 += result3%10;
}
result ++;
}

코드

#include <iostream>
#include <math.h>
using namespace std;

int main()
{
    int input;
    int num=7 ;
    cin >> input;
    int i=1000000;
    int i2;
    while (input/i==0) {
        i = i / 10;
        num--;
    }
    int result = input - num * 9;
    int result2 = result;
    int result3;
    while (result2 != input && result <= input) {
        result2 = result;
        for (result3 = result; result3; result3 /= 10)
            result2 += result3 % 10;
        result++;
    }
    if (result-1 == input)
        cout << 0;
    else
    cout << result-1;
    return 0;
}

+ Recent posts