任意一个正整数都可以用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; }