任意一个正整数都可以用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)。
注:2的1次用2表示,按2的次幂降次排序
这个题目设计到递归、位运算,虽然代码很简单,但是思路还是值得思考一下。
#include <stdio.h> int DG(int n){int i,a[16],p=0;for (i=0;n>0;n>>=1,i++) a[i]=n&1;for (i--;i>1;i--)if (a[i]&1){if (p) printf("+");printf("2(");DG(i);printf(")");p=1;}if (a[1]&1){if (p) printf("+");printf("2");p=1;}if (a[0]&1){if (p) printf("+");printf("2(0)");}return 0;} int main() {int n;scanf("%d",&n);DG(n);return 0; }