/* |
时间限制: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) 回复
这个代码做什么用的?
回复评论