样例输入:
402
样例输出:
2(8)+2(7)+2(4)+2
要求:幂不能重复,如:139=26+26+23+21+20(出现了2个6次方)
参考 C 代码:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>int main()
{int n; scanf("%d",&n);int a[100]; // 存储每个指数幂int i = 0; int exp = 0;int num = n;while (num) // 只要我num还有一口气就继续循环{exp = 0; // 每次循环都要初始化while ( pow(2.0, exp) < num ) /* 只要2.0^exp小于num,我就给它的幂自增 */{exp++; }exp--; // 因为上面while循环会多余增加一次exp,现在我给它自减一下if ( pow(2.0, exp+1) == num ) /* 上面循环while我检测的是<而不是<=,这里我要测试下是不是= */a[i++] = ++exp; /* 如果=我就要存储a[i]=++exp了,注意下标i要往后走一位 */elsea[i++] = exp; /* 否则我就存储a[i]=exp了 */num -= pow(2.0, exp);}for (int j = 0; j<i; j++){if (j) printf("+");if (a[j] == 1) /* exp=1的格式比较特殊,给它专门搞个if */printf("2");elseprintf("2(%d)", a[j]);}system("pause");
}
tips:这题有两个坑的地方:
1.输出格式:’+'只在两个数之间;exp=1的格式特殊
2.while循环判断条件是 < (<=其实也可以),后面如何保证<和=的各自条件都能考虑到exp到底是多少