問題:
編寫程式計算並輸出2的各次負冪表,要求至少能夠獲得2的負100次冪的精確表示。
分析:如果使用雙精度實型變數存放計算結果,由於c對於乙個double型資料至多能精確到15至16位有效數字,從而對於諸如:2ˆ-30=0.0000000000093132257615478515625,就不能精確表示出來,而我們希望所輸出的2的負冪表示實際上可達到的任意次負冪的精確表示。這就不能按常規辦事,需要通過分析找出一定的規律並選擇合適的演算法。
選擇演算法:
2的各次負冪的值都是由十進位制小數形式表示的,其小數字數和負冪次數相同。假定2的k次負冪的小數部分為f,今欲求2ˆ-6,即用2除f。可設法從i=1起逐位相除,。對於每乙個十進位制數字,它被2除只可能出現兩種情況:被2整除或不能被2整除,取其商作為該位新的數值,而將餘數(0或1)保留「並進製」到「下一位」十進位制位的運算,因此,求2的各次負冪所選擇演算法是按在上一次所求的2的負冪的基礎上,逐位相除(除2),餘數進製,以獲得2的下一次負冪。實際上最後一位不必計算就知道它永遠都是5.
程式設計:
依題意最多計算2的負100次冪。故可說明乙個一維整型陣列變數,它的陣列元素個數為100,每個陣列元素用以放入一位十進位制數字(0至9)。逐位相除運算用『/』而餘數只能是0或1,逐行輸出
1 #include2#define max 100
3int
main()while(!(n>=1&&n<=100
));10 printf("\n"
);11 printf("
the table of negative power of 2\n");
12 printf("
2**(-1)--2**(-%d)\n
",n);
13 printf("
\n\n");
14for(k=1;k<=n;k++)
23 d[k]=5
;24 printf("
5\n"
);25}26
return0;
27 }
2的冪,3的冪,4的冪
給定乙個整數,編寫乙個函式來判斷它是否是 2 的冪次方。示例 1 輸入 1 輸出 true 解釋 20 1 示例 2 輸入 16 輸出 true 解釋 24 16 示例 3 輸入 218 輸出 false 分析 class solution 給定乙個整數,寫乙個函式來判斷它是否是 3 的冪次方。示例...
如何判斷乙個非負整數是否是2的冪
如何判斷乙個數是2的冪,主要是要找出2的冪次方的數的特點。我們知道,1個數乘以2就是將該數左移1位,而2的0次冪為1,所以2的n次冪 就是2的0次冪n次乘以2 就是將1左移n位,這樣我們知道如果乙個數n是2的冪,則其只有首位為1,其後若干個0,必然有n n 1 為0。在求1個數的二進位制表示中1的個...
2的冪次方
2的冪次方 noip1998 問題描述 任何乙個正整數都可以用2的冪次方表示。例如 137 2 7 2 3 2 0 同時約定方次用括號來表示,即ab可表示為a b 由此可知,137可表示為 2 7 2 3 2 0 進一步 7 2 2 2 2 0 21用2表示 3 2 2 0 所以最後137可表示為 ...