关键词: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