看板 C_and_CPP 關於我們 聯絡資訊
小弟用c++ 想要寫一個class private下變數只有一個 int num[100] 是要用來儲存大數乘法用的值 既然是用class 那就要寫一個operator overloading 給class用 最近剛接觸這個東西還不是很熟 照著一些姑狗的方法試著去做 以下是我的code HugeInt HugeInt::operator*(const HugeInt& number) { int num1=0; HugeInt _number; HugeInt result; for(int i=0 ; i<=99 ; i++) result.num[i] = 0; for(int i=99 ;i>=0; i--){ for(int j=99 ; j>=0 ; j--) result.num[198-i-j] += number.num[i]*_number.num[j]; } for( int i=99 ; i>=0 ; i--){ result.num[i-1] += result.num[i] /10; result.num[i] = result.num[i]%10; } return result; } 我的想法是 把被乘數乘以乘數的每個位數以後 在把每個位數全部加起來總合 ex. 3 5 7 9 * 2 4 6 -------------------------- 18 36 54 14 28 42 10 20 30 6 12 18 -------------------------------- 6 22 52 76 78 54 -> 8 8 0 4 3 4 但實際在C++上跑 都會乘出一大堆數字 (有正有負) @@ 想很久還是不知道問題出在哪@@ 希望有高手能幫解決 感謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.254.171.40
EdisonX:相乘和進位都有問題,相乘時你的 rst[..] 會超界,調進位時 05/20 02:39
EdisonX:應從低調到高. 05/20 02:40
jimmyoic:可是我數字最低位是在[99]的位 05/20 02:41
jimmyoic:只好用這種99-i+99-j巔倒的方式 05/20 02:41
EdisonX:oh,這種設計真妙,最低位在99,那試問哪天要擴到200位的話?? 05/20 02:42
EdisonX:另 , result.num[198-i-j] 想一下 i=j=0 會發生什麼事 05/20 02:43
jimmyoic:我有想過這種超界的問題 所以最低位要在 0囉? 05/20 02:44
EdisonX:一般設計是 num[0] 放低位,硬要放高位我想也可以,只是沒見 05/20 02:45
EdisonX:人這麼做,我要說的是,只論低位或高位,都該考慮rst邊界問題 05/20 02:46
loveme00835:http://gmplib.org/ 05/20 02:46
EdisonX:確實用現有的函式庫就行了,自己搞,要有效率,正確,不容易 05/20 02:50
jimmyoic:所以我現在面對的問題就是超界囉? 05/20 03:01
jimmyoic:但我把迴圈I跟J設只到70還不會超界 也會有一樣的問題@@ 05/20 03:23
bleed1979:問一個基本的問題,陣列初始值有清0嗎? 05/20 04:01
bleed1979:因為result用+=的話,在ctor要把陣列清0 05/20 04:02
bleed1979:另外,看不到_number的值是多少。 05/20 04:05
shininglion:通常不用 library 的原因也包含這是作業所以不能用XD 05/20 10:50
loveme00835:不能用都是學生想出來的限制吧,不然cout也該自己實作 05/20 11:33
legnaleurc:只有陣列?那負數怎麼辦?超過100位呢? 05/20 14:34
jimmyoic:有清0 05/20 15:51
shininglion:但如果作業就是要寫大數運算也不可能讓你直接用 05/20 16:35
shininglion:library 阿XD 而且我還遇過教授真的不給用 library 的 05/20 16:36
shininglion:當時一整個就很不爽..超浪費時間的... 05/20 16:36
CSLabor:想必樓上還沒遇過用程式算PI還只限定用定點數運算的 05/20 16:39
EdisonX:教授不給用 library..哪天算複eigen-vector的話不就寫死 05/20 16:41
EdisonX:連 <complex> 都不能加 05/20 16:41
shininglion:可以的話我不想遇到( ̄ー ̄;) 05/20 17:32
purpose:硬要老婆把衣服拿到河邊手洗的感覺 05/20 18:25
damody:還好啦,又不是大浮點數運算,要高興了~~~ 05/20 22:46
damody:大數運算真的是月經文,來這邊後常常看到的感覺 05/20 22:47
VictorTom:雖然說早就有現成的lib可以用, 但是初學的時候拿來練習 05/23 00:00
VictorTom:思考/解決問題,規劃/實作程式,當作練基本功,也不壞吧@@" 05/23 00:01