[問題] 大數的多次方

看板C_and_CPP (C/C++)作者 (反應慢半拍)時間16年前 (2009/08/05 13:11), 編輯推噓1(1014)
留言15則, 4人參與, 最新討論串1/1
感覺程式碼應該蠻長的,所以貼連結 http://myweb.ncku.edu.tw/~f6496610/vc/Power.cpp 會用 char 寫是因為之後也許會用來算蠻大的數字 我想問的問題是在 PowerFunction 裡 就是這個程式阿~ 當初寫的時候已經盡我(目前)可能的減少他的運算次數 像是 2^1024 只要迴圈算個 10 次 2^1023 要迴圈 23 次,之類的 不過當他遇到某些次方的時候,例如 2047 就會踢到鐵板,運算時間莫名的久 想請問板上的大大們,有沒有甚麼好方法呀?? 另外問一些內建函式庫上的問題 在程式中,常常會用到移動一列的值的位置,例如 for(j=numberofmatrix_1;j>=0;j--){ inputmatrix_1[j+1]=inputmatrix_1[j]; } inputmatrix_1[0]='0'; numberofmatrix_1++; 還有填入 0 的部分,例如: for(j=0;j<temp;j++){ answermatrix[j]='0'; } answermatrix[temp]='\0'; 有沒有甚麼內建函式是可以代勞的?? 因為之前看板上文章有說,for 蠻傷效能的~ 另外如果有哪裡排版上的問題(例如怎麼樣可能會比較好看) 還是變數命名的問題 也可以跟小的講一下 先謝謝大家 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.171.151.234 ※ 編輯: terry6503 來自: 218.171.151.234 (08/05 14:39)

08/05 17:41, , 1F
填0部分是不是可以用memset? 你填的'0'其實就是0x30...
08/05 17:41, 1F

08/05 17:43, , 2F
附註一下,看完你的程式,有看到你用memcpy,所以memset?
08/05 17:43, 2F

08/05 18:23, , 3F
divide and conquer
08/05 18:23, 3F

08/05 18:34, , 4F
呵呵,其實memcpy是在版上不小心看到的...
08/05 18:34, 4F

08/05 19:11, , 5F
三樓大大是指把數字拆開看嗎?像2047=2000+47?
08/05 19:11, 5F

08/05 19:43, , 6F
你這個做法會死的原因是 2047=23*89 有個稍大的質數
08/05 19:43, 6F

08/05 19:43, , 7F
所以你加的那裡就沒有拆開
08/05 19:43, 7F

08/05 19:43, , 8F
三樓的意思是要你對半切 2047就寫成 1023*2+1 去做
08/05 19:43, 8F

08/05 20:29, , 9F
原來是誤解了~~那這樣有點想法了(剛剛頭腦使用率:100%)
08/05 20:29, 9F

08/06 15:45, , 10F
最後用遞迴來做divide and conquer,終於完成了
08/06 15:45, 10F

08/06 15:46, , 11F
不過我發現切的大小越小不一定是最佳解(跟網路查的一樣)
08/06 15:46, 11F

08/06 15:47, , 12F
而且有很多的計算時間耗在計算要怎麼切開
08/06 15:47, 12F

08/06 15:48, , 13F
使得次數少的運算速度不一定比次數多一點的快
08/06 15:48, 13F

08/06 15:57, , 15F
這是目前的更新版~(呵呵,暑假真閒),有建議跟我說喔~
08/06 15:57, 15F
文章代碼(AID): #1AUHIDks (C_and_CPP)
文章代碼(AID): #1AUHIDks (C_and_CPP)