2的次冪表示 (遞迴)
阿新 • • 發佈:2019-02-06
思路:這遞迴遞的我頭都暈了,先貼個偽遞迴吧
AC程式碼:
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; void fun1(int a) { //輸出2的a次方,因為題目最大就20000,2的15次方足以 if(a == 0) printf("2(0)"); else if(a == 1) printf("2"); else if(a == 2) printf("2(2)"); else if(a == 3) printf("2(2+2(0))"); else if(a == 4) printf("2(2(2))"); else if(a == 5) printf("2(2(2)+2(0))"); else if(a == 6) printf("2(2(2)+2)"); else if(a == 7) printf("2(2(2)+2+2(0))"); else if(a == 8) printf("2(2(2+2(0)))"); else if(a == 9) printf("2(2(2+2(0))+2(0))"); else if(a == 10) printf("2(2(2+2(0))+2)"); else if(a == 11) printf("2(2(2+2(0))+2+2(0))"); else if(a == 12) printf("2(2(2+2(0))+2(2))"); else if(a == 13) printf("2(2(2+2(0))+2(2)+2(0))"); else if(a == 14) printf("2(2(2+2(0))+2(2)+2)"); else if(a == 15) printf("2(2(2+2(0))+2(2)+2+2(0))"); } void fun2(int a, int cur) { if(a == 0) return; int t = a % 2; int tmp = a / 2; fun2(tmp, cur + 1); if(t == 1) { if(tmp != 0) printf("+"); fun1(cur); } } int main() { int n; while(scanf("%d", &n) != EOF) { fun2(n, 0); printf("\n"); } return 0; }