用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c++代码库

任何一个正整数都可以用2的幂次方表示。

2019-07-30 作者: Playboy_lh举报

[c++]代码库

/*
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
 
题目描述
任何一个正整数都可以用2的幂次方表示。例如:
137=27+23+20
同时约定方次用括号来表示,即ab可表示为a(b)。
由此可知,137可表示为:
2(7)+2(3)+2(0)
进一步:7=22+2+20(21用2表示)
3=2+20
所以最后137可表示为:
2(2(2)+2+2(0))+2(2+2(0))+2(0)
 
又如:
1315=210 +28 +25 +2+1
所以1315最后可表示为:
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
*/
#include<stdio.h>
 
void put(int num, int n);
 
int main()
{
    int num;
    scanf("%d", &num);
    put(num, 0);
}
 
void put(int m, int n)
//m为被分解的数,n为二进制位数,r为位数上的数值。
{
    int r;
    if (m == 0)//m已经被分解完,返回
    {
        return;
    }
    r = m % 2;
    m = m / 2;
    put(m, n + 1);
    if (m != 0 && r != 0)
        //如果m不为0且r不为0证明这不是第一个2的幂次方,输出+
    {
        printf("+");
    }
    if (r == 1)
    {
        if (n == 0)
        {
            printf("2(0)");
        }
        else if (n == 1)
        {
            printf("2");
        }
        else if (n == 2)
        {
            printf("2(2)");
        }
        else
        {
            printf("2(");
            put(n, 0);
            //如果指数不能用2(0),2,2(2)表示则继续分解
            printf(")");
        }
 
    }
}

[代码运行效果截图]


任何一个正整数都可以用2的幂次方表示。


网友评论    (发表评论)

共1 条评论 1/1页

发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...