看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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
qwe801031:改掉之後出現一個錯誤耶 10/13 21:56
qwe801031: error C2668: 'pow' : 模稜兩可的呼叫多載函式 10/13 21:56
qwe801031:照著上面的打 請問是什麼意思@@ 10/13 21:56
VictorTom:把pow裡的b與5之前都多加一個(float)或(double)轉型試試 10/13 21:57
VictorTom:另外, 使用pow()之前你可能需要#include <math.h> :) 10/13 21:57
qwe801031:#include"math.h" 這個有加了 我試試v大的方法看看@@ 10/13 21:58
qwe801031:兩個都可以使用 真神奇 謝謝XD 10/13 21:59
※ 編輯: kikiqqp 來自: 122.116.119.110 (10/13 22:06)
VictorTom:解釋一下:) pow有float/double/long double三種型態參數 10/13 22:09
VictorTom:的overloading, 而你呼叫的時候是傳了兩個int, 所以 10/13 22:09
VictorTom:compiler不知道要幫你轉型成上面三種浮點數的哪一種型態 10/13 22:10
VictorTom:, 這與函數重載, 強制轉型, 隱式轉型這些東西都有關, 現 10/13 22:10
VictorTom:在你可能還沒學到, 如果有興趣有時間你可以先就板上或精 10/13 22:10
kikiqqp:不過我寫完有試一下 編譯器不同吧 GCC沒報錯 10/13 22:11
VictorTom:華區研究一下; 再不然就像k大說的, 以後再慢慢學吧:) 10/13 22:11
VictorTom:用g++應該就會報錯了吧?? 我印象中好像是這樣XD 10/13 22:12
qwe801031:不知道耶 我用Visual C++ 2008 Express的 10/13 22:14
karta031736:通常初學者,老師都會要學生有邏輯思考的能力 10/15 01:52
karta031736:所以比較不建議用內建的函式吧@@ 我老師跟我說過... 10/15 01:53
※ 編輯: kikiqqp (49.158.70.171), 04/13/2018 11:40:04