English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

如果C++計算用到大數字的話 就必須使用字串來做計算

減法和加法都會用

可是乘和除一點頭緒都沒有

哪位好心人幫忙一下 謝謝

2006-07-19 07:08:16 · 5 個解答 · 發問者 ? 1 in 電腦與網際網路 程式設計

回 Jacob Lee
我連一位一位的乘除法都不懂了
兩位兩位更是半丈金剛摸不著頭腦
可以麻煩補充一下嗎

2006-07-19 16:59:19 · update #1

5 個解答

不要用字串!!!! 太辛苦了!!
用(長)整數陣列!
如:
#define T 30
#define D 100 // 因為 100 * 100 = 10000 < 32767,當然,現代的 int 不止 32767 了!所以可以改大一點,比較快!若 compiler 支援,用 long long int 更好。
int a[T], b[T];
這樣,a[x] 就可以存 2 位數,a[x] 可以和 b[x] +, -。記得處理進借位問題。
這樣,你也不用每位數都處理,只要 每 2 位或每 xx位(看你用的變數型態)才處理一次。

想想看,你用手怎麼做一位一位做乘、除法?
一樣,這裡也是〝二位〞〝二位〞做!!(當然,long 的話可以 5 位。)
你可以用a[0]記位數,a[1] 是〝個〞位,a[2]是〝十〞位...直到 a[a[0]]位。
做完加、減、乘、除後,記得要把位數記回 a[0]。
乘法記得 99 * 99 = 9801,進 98 (要有個 carry,可以 carry >> 1 的進位)
除法記得要把 (餘數 * D)+ 下〝一〞位,再除。
其實,就和手做乘除法一樣。

我16年前寫過,用來算 PI 到下數下 5000 位。
你若還是想不出來,我再說詳細一點。

加油! ^_^
祝 成功。

2006-07-20 06:18:09 補充:
我現在火燒屁屁!希望在 27 小時內一定會燒完!燒完後,我會抽空再補充點!你先去 Rody 建議的 龍大 頁看看。我燒完也會去看一下。你先加油啦!

2006-07-20 11:52:54 補充:
中場休息,先寫點。我當年是用 struct { int dig, int val[T] } 做的,位數是放在 dig 裡,不是放在 val[0]〝個〞位算第 0 位,〝十〞位算第 1 位………第 x 位 * 第 y 位 存在 第 x + y 位。值:99 * 99 = 9801位:0 + 0 -> 0算完乘法,再處理進位:從 0 -> x+y 位:沒空簡查程式,您自己試試。要算 c = a * b,大概是這樣:

2006-07-20 11:53:12 補充:
C = A + B // C 是 c 的位數清除 c[0] ~ c[C]for (i=0; i T) ca= c[i]/T, c[i]%=T;if (ca) C++, c[C] = ca;

2006-07-20 11:54:10 補充:
if (c[i] > T) ca= c[i]/T, c[i]%=T;錯了!應該是if (c[i] > T) ca= c[i]/T, c[i]%=T;else ca = 0;

2006-07-21 05:50:05 補充:
對了,print out 時要記得:printf("% 2d", c[C]);for (i=C-1; i>=0; i--) printf("%02d", c[i]);2 是你用的位數。不然,印出來會是錯的喔!原因自己想啦!才會進步! ^_^

2006-07-19 08:56:51 · answer #1 · answered by ? 7 · 0 0

雪嵐,請在知識+裡找找吧.我保證一定有.不會寫沒關係.懶的找才是大病.

2006-07-20 21:55:23 補充:
Rody,久違久違.知識+裡的大都是例題.要舉一反三啊.不然知識+真的變成功課+啦... :)
雪嵐.我絕無苛責之意.可能語氣太重了.請原諒.

2006-07-19 17:24:18 · answer #2 · answered by 7 · 0 0

5 x 4
= 5連加4次

2006-07-19 08:42:31 · answer #3 · answered by adam! 5 · 0 0

其實你可以回想一下國小剛剛學數學的時候,乘法和除法怎麼做,大整數的做法也可以比照辦理﹙拜託...小學生做得到的事情電腦一定也可以啦~~﹚

2006-07-19 22:54:27 補充:
哈~~又看到龍大大了, 真難得~~
其實龍大大不要太苛責他啦, 大數運算寫的人不少, (我剛剛找了一下發現好多都是龍大大回答的), 不過真正寫四則運算的卻很少見, 我找了好久才找到一個, 以下是網址, 自行參考吧~~
http://www.wretch.cc/blog/swchen&article_id=4171713
呵... 這想法和我的想法挺接近的喔~~

2006-07-19 22:58:32 補充:
剛剛仔細看了一下, 我想這網址的作法和 Jacob Lee 差不多, 但 Jacob Lee 說得比較有道理, 一次多點位數進行處理會比較快

2006-07-19 08:25:13 · answer #4 · answered by Rody 5 · 0 0

印像中,以前的CPU也只有 加法器
但卻能做 加、減、乘、除 的運算
所以既然你 加、減 已經做出來了,那 乘、除 應該就行了
只要知道乘法或除法如何用加法表示就行

因為議建已經用完了,只要用回答來貼了^^

2006-07-19 07:45:21 · answer #5 · answered by ? 2 · 0 0

fedest.com, questions and answers