• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

c++2的幂次方

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

c++2的幂次方

题目描述

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

同时约定用括号来表示方次,即a的b次,可以表示为a(b)。 

由此可知,137可以表示为: 

2(7)+2(3)+2(0) 

进一步: 

7=2(2)+2+2(0)(2的1次用2表示) 

3=2+2(0) 

所以137可以表示为: 

2(2(2)+2+2(0))+2(2+2(0))+2(0) 

2

的次幂降次排列。

输入

正整数n(n<=20000)

输出

用0,2表示符合约定的n(在表格中不能有空格)。

样例输入

137

样例输出

2(2(2)+2+2(0))+2(2+2(0))+2(0)

代码解释

#include <bits/stdc++.h>
#include <stdio.h>
using namespace std;
int n;
int a[17];
void work(int x)
{
    if (x == 0)
    {
        printf("0"); 
        return ;
    }
    if (x == 2)
    {
        printf("2");
        return ;
    }
/* 			x等于0或者2的时候就不可以拆分,直接返回原值       */ 
    while (1)
    {
    	int i;
        for (i=16;a[i]>x;i--);//重点    找出小于x的最大2次幂  
        if (a[i] != 2)
        {
            printf("2(");
            work (i);//递归    继续拆分 
            printf(")");
        }
        else
        {
            printf("2"); 
        }
		if (x - a[i]) printf("+"),x = x - a[i];//拆分完大的部分后仍有剩余,继续拆分小的部分 
		else return ;//拆分完就退出  
    }
}
int main()
{
    a[0] = 1;
    for (int i = 1;i <= 16;i ++) a[i] = a[i - 1] * 2;
/*					预处理出2的1-16次幂										*/
    scanf("%d",&n);
    work (n);
}

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
单链表的创建和基本操作C语言发布时间:2022-07-13
下一篇:
C#两时间,时间间隔发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap