• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

c++ 海叔叔 4年前 (2021-12-13) 124次浏览 已收录 0个评论
文章目录[隐藏]

关键词:c++,2的次方

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

/*
时间限制: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(")");
        }
    }
}

来源搞代码网《c++任何一个正整数都可以用2的幂次方表示》http://www.gaodaima.com/68582.html


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:c++任何一个正整数都可以用2的幂次方表示
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址