[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(")");
}
}
}
[代码运行效果截图]
中级程序员
by: 月下孤舟 发表于:2019-07-30 15:50:10 顶(0) | 踩(0) 回复
这个代码做什么用的?
回复评论