算法训练 2的次幂表示

问题描述
  任何一个正整数都可以用2进制表示,例如:137的2进制表示为10001001。
  将这种2进制表示写成2的次幂的和的形式,令次幂高的排在前面,可得到如下表达式:137=2^7+2^3+2^0
  现在约定幂次用括号来表示,即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)
  又如:1315=2^10+2^8+2^5+2+1
  所以1315最后可表示为:
  2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
输入格式
  正整数(1<=n<=20000)
输出格式
  符合约定的n的0,2表示(在表示中不能有空格)
样例输入
137
样例输出
2(2(2)+2+2(0))+2(2+2(0))+2(0)
样例输入
1315
样例输出
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
提示
  用递归实现会比较简单,可以一边递归一边输出
  
code:

#include  <stdio.h>
#include  <math.h>

void  func(int n){
    while (n){
        if (n<2){     //如果是0次方输出2(0)
            printf("2(0)");
            n--;
        }else if (n<4){   //如果是1次方输出2
            printf ("2");
            n -= 2;
            if (n)printf("+");
        }else {
            int i;
            printf ("2(");
            for (i=2; ; i++)
                if (pow(2, i+1)>n)break;
            func(i);
            printf(")");
            n -= pow(2, i);
            if (n){
                printf("+");
            }
        }
    }
}

int main() {
    int n;
    scanf( "%d", &n);
    func(n);
    return 0;
}

初学小白,如果有可改进之处欢迎评论!

时间: 2024-09-20 00:57:32

算法训练 2的次幂表示的相关文章

string-JAVA算法训练 数列给定一个正整数k(3≤k≤15)

问题描述 JAVA算法训练 数列给定一个正整数k(3≤k≤15) ------------------题目------------------------------------------------------- 给定一个正整数k(3≤k≤15),把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列,例如,当k=3时,这个序列是: 1,3,4,9,10,12,13,- (该序列实际上就是:3^0,3^1,3^0+3^1,3^2,3^0+3^2,3^1+3^2,3^0+3^1+3

蓝桥杯-算法训练 操作格子

算法训练 操作格子   时间限制:1.0s   内存限制:256.0MB        问题描述 有n个格子,从左到右放成一排,编号为1-n. 共有m次操作,有3种操作类型: 1.修改一个格子的权值, 2.求连续一段格子权值和, 3.求连续一段格子的最大值. 对于每个2.3操作输出你所求出的结果. 输入格式 第一行2个整数n,m. 接下来一行n个整数表示n个格子的初始权值. 接下来m行,每行3个整数p,x,y,p表示操作类型,p=1时表示修改格子x的权值为y,p=2时表示求区间[x,y]内格子权

蓝桥杯 算法训练 安慰奶牛

 算法训练 安慰奶牛   时间限制:1.0s   内存限制:256.0M 问题描述 Farmer John变得非常懒,他不想再继续维护供奶牛之间供通行的道路.道路被用来连接N个牧场,牧场被连续地编号为1到N.每一个牧场都是一个奶牛的家.FJ计划除去P条道路中尽可能多的道路,但是还要保持牧场之间 的连通性.你首先要决定那些道路是需要保留的N-1条道路.第j条双向道路连接了牧场Sj和Ej(1 <= Sj <= N; 1 <= Ej <= N; Sj != Ej),而且走完它需要Lj的时

蓝桥杯-算法训练51-Torry的困惑(基本型)

今天做这道题最初以为会用到什么数学公式,在思考后发现自己想多了. 思路主要两个: 1. 生成一个质数表,再按要求求值(本文就按此方法): 2.从小取到大,判断是否是质数,如果是就相乘,并构建计数器判断是否达到n个. 算法训练 Torry的困惑(基本型)   时间限制:1.0s   内存限制:512.0MB 问题描述 Torry从小喜爱数学.一天,老师告诉他,像2.3.5.7--这样的数叫做质数.Torry突然想到一个问题,前10.100.1000.10000--个质数的乘积是多少呢?他把这个问题

lift and throw-蓝桥杯-算法训练 Lift and Throw 求教各位大牛,谢谢各位

问题描述 蓝桥杯-算法训练 Lift and Throw 求教各位大牛,谢谢各位 问题描述 给定一条标有整点(1, 2, 3, ...)的射线. 定义两个点之间的距离为其下标之差的绝对值. Laharl, Etna, Flonne一开始在这条射线上不同的三个点, 他们希望其中某个人能够到达下标最大的点. 每个角色只能进行下面的3种操作, 且每种操作每人不能进行超过一次. 1.移动一定的距离 2.把另一个角色高举过头 3.将举在头上的角色扔出一段距离 每个角色有一个movement range参数

c语言-算法训练 最大的算式 用C语言怎么解决

问题描述 算法训练 最大的算式 用C语言怎么解决 问题描述 题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果尽量大.因为乘号和加号一共就是N-1个了,所以恰好每两个相邻数字之间都有一个符号.例如: N=5,K=2,5个数字分别为1.2.3.4.5,可以加成: 1*2*(3+4+5)=24 1*(2+3)*(4+5)=45 (1*2+3)*(4+5)=45 -- 输入格式 输入文件共有二行,第一行为两个有空格隔开的整数,表示N和K,其中

蓝桥杯-算法训练2 最大最小公倍数

刚做了,蓝桥杯算法训练的最大最小公倍数一题,感觉考查的是数学了,哈哈. 时间限制:1.0s   内存限制:256.0MB 问题描述 已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少. 输入格式 输入一个正整数N. 输出格式 输出一个整数,表示你找到的最小公倍数. 样例输入 9 样例输出 504 数据规模与约定 1 <= N <= 10^6. 思路如下: 1. n是奇数,那就最大的三个数相乘 2. n是偶数,得分两种情况了, ①如果n不是3的倍数,那就s=n*(n-1)

c语言-算法训练 未名湖边的烦恼 怎么用C语言解决

问题描述 算法训练 未名湖边的烦恼 怎么用C语言解决 问题描述 每年冬天,北大未名湖上都是滑冰的好地方.北大体育组准备了许多冰鞋,可是人太多了,每天下午收工后,常常一双冰鞋都不剩. 每天早上,租鞋窗口都会排起长龙,假设有还鞋的m个,有需要租鞋的n个.现在的问题是,这些人有多少种排法,可以避免出现体育组没有冰鞋可租的尴尬场面.(两个同样需求的人(比如都是租鞋或都是还鞋)交换位置是同一种排法) 输入格式 两个整数,表示m和n 输出格式 一个整数,表示队伍的排法的方案数. 样例输入 3 2 样例输出

新颖训练方法——用迭代投影算法训练神经网络

首发地址:https://yq.aliyun.com/articles/72738 作者介绍:Jesse Clark 研究相位恢复的物理学家.数据科学家,有着丰富的建设网站与设计手机应用的经验,在创业公司有着丰富的经验,对创业有着极大的热情.  Github: https://github.com/jn2clark Linkedin: http://www.linkedin.com/in/j3ss3cl4rk 相位恢复(PR)关心的是在给定幅度信息以及受到实空间限制下,找到复值函数(通常在傅立叶