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

請問為什麼這一題被移除了
請問原發問者你已經解出來了嗎?
如果已經解出來了可不可以參考一下做法
我也是新手 很好奇怎麼做
自己摸了好久 快解出來了
現在發問好麻煩
一直說請詳述問題內容

2006-12-15 13:22:52 · 3 個解答 · 發問者 Jelly 7 in 電腦與網際網路 程式設計

先說明 我是初學者 學不到1年
看到之前的發問者的問題 覺得很好玩

不知道是不是問題解決了呢???

沒差 貼我自己的出來

請高手給一點指正
看能不能再減少不必要的程式碼

http://www.audio329.com/jelly/machine

ㄜ 補充不能用超連結唷 >< 請自己連吧

2006-12-15 16:03:44 · update #1

哇 原來蚯蚓有回答那一題唷
我有看到有一個回答
很高興要點開來看的時候

畫面是

"發問者以自行移除問題"

害我很沮喪 還以為是有人吐嘈它 所以它徹掉了

不過........那它幹嘛撤掉阿 真是死小孩
我還贊助2點耶

2006-12-15 16:17:50 · update #2

to 蚯蚓

我剛剛看了
沒有看到多兩個零耶 跟你的答案是一樣的

可不可以再說一下是那邊的問題???

我知道我自己如果是不同的位數相乘 會有一點問題
如100 * 100
我的答案會是010000
不過我有加這個動作掉0

if($az[$del]==0){$az[$del]="";} //如果最後一個陣列最後一個值=0 就刪掉吧

所以不知道你說的多兩個0是在那邊 請指導一下

2006-12-16 15:55:46 · update #3

實在是太妙了 明明只是個乘法
不過沒想到有那麼多種玩法
哈哈哈

等等我也把我的改成會列出執行結果好了 XD

2006-12-16 21:33:19 · update #4

to流浪

你打算怎麼處理進位的問題??
數字夠大的話
單一位數總和破萬都有可能唷 XD

2006-12-17 08:46:26 · update #5

to蚯蚓
請移駕到這個網址

冷泡茶做的整理
http://swc.sdcs.com.tw/YahooKnowledge/q45/longNumber.php

2006-12-17 18:43:47 · update #6

輸入
11111111112222222222333333333344444444445555555555666666666677777777778888888888999999999900000000001111111111222222222233333333334444444444555555555566666666667777777777888888888899999999990000000000
相乘

你的答案錯了 哈哈

2006-12-17 18:43:52 · update #7

3 個解答

我的答案也被刪掉了? 

http://211.20.181.250/~happyman/bignum.php

改成phps有 source code.

2006-12-16 15:23:49 補充:
我也把 jelly 的 input box 加上去了
http://211.20.181.250/~happyman/bignum.php?x=12&y=12

我的程式更"肥大",因為想要把算的過程都畫出來.
不畫的話, 程式碼就會很精簡了 :p

2006-12-16 18:22:39 補充:
上面 http://www.audio329.com/jelly/machine/index.php 的
直接把最後結果 strrev 過來, 要先檢查是否有 leading 的 0, 不然有可能會多幾位數唷..
9754610580998141358899510449999942323854582884 x 9754610580998141358899510449999942323854582884 的話, 你的程式會多兩個 0 :p

2006-12-16 21:35:32 補充:
Ouch.. 有問題的是上面那個 index.php 的 source, 我把你的 code 一起弄進來驗算了. 看樣子是沒有問題.. :)

2006-12-17 23:11:37 補充:
除了乘法,還有其他的運算..
大家都好像時間滿多的, 太令人感動了....
在 linux 下直接叫 bc 來就好了 :p

2006-12-18 02:31:49 補充:
不好意思 冷泡茶兄
請幫我把這兩個地方 comment 掉即可
// if ($a[$i] == 0 ) continue;
for($j=0;$j //if ($b[$j] == 0 ) continue; // 畫起來漂亮
貪快結果 array 的 index 不連續, 造成 loop 的次數不對,當然加總就錯囉! :p

2006-12-15 16:07:24 · answer #1 · answered by Chiu 4 · 0 0


我的想法是:

將整個乘法化為一般徒手算的方式來演算,
例:
111
X111
--------------
111
111
111
---------------
12321
而將上式的計算式所產生的數字依序寫入陣列,
無數字的部份可補0,
而最後將陣列數字加總即可(即可得12321)!
ps:
我使用了php、perl、python與ruby來測試天文數字的相乘,
python與ruby可以完整地將所有的數字呈現,
而php與perl就沒辦法!
例:
print 1111111111111*1111111111111;
python與ruby輸出:1234567901234320987654321,
perl與php輸出:1.23456790123432e+024。


2006-12-17 13:13:29 補充:
而將上式的計算式所產生的數字依序寫入陣列,
請改成:
而將上式的計算式所產生的數字依序寫入二維陣列,

2006-12-17 08:09:42 · answer #2 · answered by 流浪玩家 6 · 0 0

首先,先感謝酷走熱情邀約
實際上,原本的那一題在下也是發問者問的當天我就看到了
但當晚有點晚了,小試了一下沒有馬上成功加上不敵周公的招喚
後來便睡覺去,隔天想要再回答時,發現問題已經不移除了便作罷
(也就是剛好應該是在Jelly重新發問前)
至於,Jelly重新發問我就沒注意到了說...呵呵...
既然酷走邀約,在下怎會不來湊個熱鬧

由於我最開啟的構想是跟蚯蚓雷同
但蚯蚓已將此構想都寫完整了
所以,既然想湊熱鬧,再下用了另一種概念來寫
我就解釋在程式碼中了

但是,我已經受夠這裡新版貼程式碼的麻煩
所以,這次在此僅貼出精簡內容,搞不好又有什麼符號會被吃掉也不一定
說明與範例均請由下面連接囉~~~

範例、程式碼、解說全部在裡面
http://swc.sdcs.com.tw/YahooKnowledge/q45/

$baseSplit=3;
function splitNumber($num) {
global $baseSplit; $n=$baseSplit;
for ($i=-(strlen($num))+1; $i<=0; $i+=$n) {
if (abs($i)-($n-1) < 0) {
$numAry[]=substr($num,0,abs($i)+1);
}else{
$numAry[]=substr($num,abs($i)-($n-1),$n);
}
}
return $numAry;
}
$a_numAry=splitNumber($_POST['a']);
$b_numAry=splitNumber($_POST['b']);
$aC=count($a_numAry)-1;
$bC=count($b_numAry)-1;
$totLenght=strlen($a_numAry[$aC]*$b_numAry[$bC])+(($aC+$bC)*$baseSplit);
$v=0;
for ($i=$aC; $i>=0; $i--) {
for ($j=$bC; $j>=0; $j--) {
$totAry[$v]=$a_numAry[$i]*$b_numAry[$j];
for ($k=1; $k<=($i+$j)*$baseSplit; $k++) {$totAry[$v] .="0";}
$totAry[$v]=str_pad($totAry[$v],$totLenght, "0", STR_PAD_LEFT);
$v++;
}
}
$z=$totLenght+1;
for ($i=1; $i<=$totLenght; $i++) {
for ($j=0; $j $ansAry[$z] +=substr($totAry[$j],-$i,1);
}
$z--;
}
for ($i=$totLenght+1; $i>=0; $i--) {
if ($ansAry[$i] > 9) {
$ans .=substr($ansAry[$i],1,1);
$ansAry[$i-1] +=substr($ansAry[$i],0,1);
}else{
$ans .=substr($ansAry[$i],0,1);
}
}
$ans = strrev($ans);
?>


2006-12-17 01:57:26 補充:
上面的程式碼 $baseSplit=3; 請用4或5或6
因為忽略了加總時會進位到百位的問題
在下修正後另補充~~~

2006-12-17 02:40:28 補充:
最後一個迴圈裡面的以下兩行
$ans .=substr($ansAry[$i],1,1);
$ansAry[$i-1] =substr($ansAry[$i],0,1);

要改成
$ans .=substr($ansAry[$i],-1);
$ansAry[$i-1] =substr($ansAry[$i],0,strlen($ansAry[$i])-1);

2006-12-17 02:42:10 補充:
http://swc.sdcs.com.tw/YahooKnowledge/q45/ 的說明內容與程式
均已經更新

2006-12-18 18:22:49 補充:
不好意思 冷泡茶兄
請幫我把這兩個地方 comment 掉即可
// if ($a[$i] == 0 ) continue;
for($j=0;$j //if ($b[$j] == 0 ) continue; // 畫起來漂亮

已經comment 掉了喔~~~
結果也都一樣了..哈~~~

2006-12-16 19:41:02 · answer #3 · answered by 冷泡茶 6 · 0 0

fedest.com, questions and answers