好数

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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值