Description
小明特别喜欢数字3,他认为如果一个正整数等于3的若干个整数次幂相加,并且这些整数次幂均不重复出现,
这样的数是“好数”。例如:
1是好数,1=30
4是好数,4=31+30
12是好数,12=32+31
2不是好数,2=30+30,30出现了2次
15不是好数,15=32+31+31,31出现了2次
20不是好数,20=32+32+30+30,32和30各出现2次
虽然15和20还有其他3整数次幂写法,比如15=31+31+31+31+31,但仍不满足好数定义。
现在输入一个正整数n,输出不小于n的所有好数中最小的一个。
输入格式
仅一行,正整数n。(1<=n<=105)。
输出格式
一个正整数,表示不小于n的所有好数中最小的一个。
输入样例
14
输出样例
27
Hint
【输入样例2】
13
【输出样例2】
13
【输入样例3】
100000
【输出样例3】
177147
样例2说明:13=32+31+30,因此不小于13的好数中最小的就是13;
样例3说明:177147=311。
三进制问题:
- 12的三进制数为110。
- 15的三进制数为120。 所有的好数转成三进制数后,各位只有1或者0。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i, t, n;
scanf("%d", &n);
for(i = n; ; i++)
{
t = i;//不改变i的值。
while(t>1)
{
if(t % 3 > 1)
break;
//余数一旦为1或者0,立即终止while循环。
t /= 3;
}
if(t <= 1)
{
printf("%d\n", i);
break;
}
//如果t完成一个while循环,则i为好数。
}
return 0;
}