# 從鍵盤輸入一個正整數,用2的冪次方的形式輸出。約定冪次方用括號來表示,即表示為2(b),b=1時,冪省略。例如139=2^7+2^3+2^1+2^0,即:2(7)+2(3)+2+2(0)
阿新 • • 發佈:2018-12-19
樣例輸入:
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要往後走一位 */ else a[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"); else printf("2(%d)", a[j]); } system("pause"); }
tips:這題有兩個坑的地方: 1.輸出格式:’+'只在兩個數之間;exp=1的格式特殊 2.while迴圈判斷條件是 < (<=其實也可以),後面如何保證<和=的各自條件都能考慮到exp到底是多少