어떤 자연수 N
이 있을 때, 그 자연수 N
의 분해합은 N
과 N
을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M
의 분해합이 N
인 경우, M
을 N
의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 된다. 따라서 245는 256의 생성자가 된다. 물론, 어떤 자연수의 경우에는 생성자가 없을 수도 있다. 반대로, 생성자가 여러 개인 자연수도 있을 수 있다.
자연수 N
이 주어졌을 때, N
의 가장 작은 생성자를 구해내는 프로그램을 작성하시오.
첫째 줄에 자연수 N(1 ≤ N ≤ 1,000,000)
이 주어진다.
첫째 줄에 답을 출력한다. 생성자가 없는 경우에는 0
을 출력한다.
216
21
ICPC > Regionals > Asia Pacific > Korea > Asia Regional - Seoul 2005 B번
-데이터를 추가한 사람: kimtree97, lambda, minju1307, yjwr0528
import java.util.Scanner;
public class Code2231 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner=new Scanner(System.in);
int N=scanner.nextInt();
boolean isFind=false;
int i=1;
while(i<N) {
if(N==i+eachSum(i)) {
isFind=true;
break;
}
i++;
}
if(isFind) {
System.out.println(i);
}
else {
System.out.println(0);
}
}
public static int eachSum(int n) {
int sum=0;
int count=0;
boolean isRoop=true;
int temp=n;
int num=1;
while(isRoop) {
if(temp/10>0) {
count++;
}
else {
isRoop=false;
break;
}
temp=temp/10;
}
for(int i=0;i<count;i++) {
num=num*10;
}
while(n/10!=0) {
sum=sum+n/num;
n=n%num;
num=num/10;
}
sum=sum+n;
return sum;
}
}
N=i+i의 각 자릿수 합
이 되는 i의 최솟값을 구하면 된다.
i의 각 자릿수 합을 구하는 것이 까다로웠는데, 먼저 i 자릿수를 구하고 그 수만큼 10을 곱해서 100이든 10이든 1000이든 만든다.(근데 일의 자리는 안세야됨)
그다음 그 수와 i
를 자릿수만큼 구한 10(ex.100이든 ,10이든,,)으로 나누고, 그 몫을 sum
에 저장하고, i
는 10
과 같은 걸로 나눈 나머지가 되고, 10 또한 10을 나누어 1로 바꿔주자.
만약 i/10==0
이 되면 일의자리 숫자가 되었으니 종료해주고,
그 수를 sum에 더하고 리턴해준다.