作者kikiqqp (貓食罐頭)
看板C_and_CPP
標題Re: [問題] A的B次方問題
時間Tue Oct 13 21:52:27 2009
※ 引述《qwe801031 (嗯哼)》之銘言:
: 我是個剛接觸c++的學生
: 老師出了個題目 是2的五次方
: 要我寫個簡單的程式碼
: 我也只會最笨的方式
: int main()
: {
: int b;
: b=2;
: printf("%d的五次方=%d",b,b*b*b*b*b);
: getch();
: return 0;
: }
: 就是給他乘個五次 然後印出來 想請教有別的比較方便的方法嗎
: 爬了文實在看不懂 有些都沒教過不太了解 才來問 有請高手
這方法不笨呀
寫程式有很多方式 只要能達成你要的結果 都是好程式
剩下的只是最佳化或更精簡的寫法
你可以引入math.h函式
就是上面多加一行 #include <math.h>
然後把
printf("%d的五次方=%d",b,b*b*b*b*b);
改寫成
printf("%d的五次方=%d",b,(int) pow(b, 5));
pow語法是float pow(float base, float exp);
base 為基底 exp 為冪數 輸入為浮點形式 輸出也是浮點
因為輸出是浮點 所以用(int)強制轉為整數
不久後你就會遇到型態轉變方面的問題 不過上課會教
就不特別講解了
補充
unsigned long i = 1;
unsigned long a = 2;
unsigned int n = 5;
while(n)
{
if(n & 1)
{
i *= a;
}
a *= a;
n >>= 1;
}
--
如果課堂沒教過pow 也沒教過迴圈
那你寫的就算是最佳解之一
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.116.119.110
1F:推 qwe801031:改掉之後出現一個錯誤耶 10/13 21:56
2F:→ qwe801031: error C2668: 'pow' : 模稜兩可的呼叫多載函式 10/13 21:56
3F:→ qwe801031:照著上面的打 請問是什麼意思@@ 10/13 21:56
4F:→ VictorTom:把pow裡的b與5之前都多加一個(float)或(double)轉型試試 10/13 21:57
5F:→ VictorTom:另外, 使用pow()之前你可能需要#include <math.h> :) 10/13 21:57
6F:→ qwe801031:#include"math.h" 這個有加了 我試試v大的方法看看@@ 10/13 21:58
7F:→ qwe801031:兩個都可以使用 真神奇 謝謝XD 10/13 21:59
※ 編輯: kikiqqp 來自: 122.116.119.110 (10/13 22:06)
8F:推 VictorTom:解釋一下:) pow有float/double/long double三種型態參數 10/13 22:09
9F:→ VictorTom:的overloading, 而你呼叫的時候是傳了兩個int, 所以 10/13 22:09
10F:→ VictorTom:compiler不知道要幫你轉型成上面三種浮點數的哪一種型態 10/13 22:10
11F:→ VictorTom:, 這與函數重載, 強制轉型, 隱式轉型這些東西都有關, 現 10/13 22:10
12F:→ VictorTom:在你可能還沒學到, 如果有興趣有時間你可以先就板上或精 10/13 22:10
13F:→ kikiqqp:不過我寫完有試一下 編譯器不同吧 GCC沒報錯 10/13 22:11
14F:→ VictorTom:華區研究一下; 再不然就像k大說的, 以後再慢慢學吧:) 10/13 22:11
15F:→ VictorTom:用g++應該就會報錯了吧?? 我印象中好像是這樣XD 10/13 22:12
16F:→ qwe801031:不知道耶 我用Visual C++ 2008 Express的 10/13 22:14
17F:推 karta031736:通常初學者,老師都會要學生有邏輯思考的能力 10/15 01:52
18F:→ karta031736:所以比較不建議用內建的函式吧@@ 我老師跟我說過... 10/15 01:53
※ 編輯: kikiqqp (49.158.70.171), 04/13/2018 11:40:04