Discussion:
[問題] 長整數乘上長整數
(时间太久无法回复)
B.r
2007-01-04 17:14:49 UTC
Permalink
     最近在寫一題程式 還不太懂 經過老師講解之後有比較了解

     題目的本意 是要以長整數max 乘上 長整數max (以陣列儲存)

老師先提了演算法 後來試著寫的時候 以9*99算出來的答案不是正確的

小弟的程式如下:

     public class multi
{
public static void main(String[] args)
{
int[] a ={9,9};
int[] b ={9,9,9};
int[] c = new int[5];
int d = 0; //進位數
int i;
for (i = 0 ; i <= 2 ; i++)
{
c[i] = (a[0] * b[i] + d) % 10;
d = (a[0] * b[i] + d) / 10;
}
}
}

可是這樣子跑出會變成991 原因是i = 2的時候

     d 還有被執行一次 也就是81 + 9 變成c[2} = 9

但實際上不是991而是891

請問一下大家 該如何避免多進了那個位?

而延伸至long max * long max 又該注意什麼細節呢?

想跟大家討論討論 先謝謝大家了

--

有違板規 請告知

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.113.183.194
※ 編輯: BearWu 來自: 59.113.183.194 (01/05 01:14)
B.r
2007-01-05 01:14:53 UTC
Permalink
: :      public class multi
: : {
: : public static void main(String[] args)
: : {
: : int[] a ={9,9};
: : int[] b ={9,9,9};
: : int[] c = new int[5];
: : int d = 0; //進位數
: : int i;
: : for (i = 0 ; i <= 2 ; i++)
: 明明你的程式碼就是 9 * 999 [指]

c[3]千位數字沒有跑進去的樣子- - 囧

: : {
: : c[i] = (a[0] * b[i] + d) % 10;
: : d = (a[0] * b[i] + d) / 10;
: : }
: : }
: : }
: 我是不知道你的程式法怎麼印出結果的
: 只不過,我強烈懷疑你明明是 9*999
: 但是你卻只印出後三位數...
: 不然,程式碼本身應該沒有問題阿...

但是當我設定i<=3的話 程式碼會出錯咧- -

要跑c[3]的話

: : 而延伸至long max * long max 又該注意什麼細節呢?
: 大概就只有效率問題吧? [等著被毆]

揍...XD

謝謝板主的回答

不過這個板不行推文?? 囧..

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.64.167.143
c***@kkcity.com.tw
2007-01-05 11:00:19 UTC
Permalink
標 題: [問題] 長整數乘上長整數
發信站: 批踢踢實業 (Fri Jan 5 01:14:49 2007)
轉信站: KKCITY!news.kkcity.com.tw!ctu-peer!ctu-reader!news.nctu!ptt
Origin: sally.csie.ntu.edu.tw
     最近在寫一題程式 還不太懂 經過老師講解之後有比較了解
     題目的本意 是要以長整數max 乘上 長整數max (以陣列儲存)
老師先提了演算法 後來試著寫的時候 以9*99算出來的答案不是正確的
小弟的程式如下:
     public class multi
{
public static void main(String[] args)
{
int[] a ={9,9}; <---不會用到a[1],就沒必要宣告兩個元素
int[] b ={9,9,9}; <--只宣告b[0],b[1],b[2]
int[] c = new int[5];
int d = 0; //進位數
int i;
for (i = 0 ; i <= 2 ; i++) <--迴圈只跑3次0~2,如設定i<=3一樣
{ 會出錯,因下行的程式b[3]是不
c[i] = (a[0] * b[i] + d) % 10; 存在的
d = (a[0] * b[i] + d) / 10;
}
}
}
可是這樣子跑出會變成991 原因是i = 2的時候
     d 還有被執行一次 也就是81 + 9 變成c[2} = 9
但實際上不是991而是891
請問一下大家 該如何避免多進了那個位?
而延伸至long max * long max 又該注意什麼細節呢?
想跟大家討論討論 先謝謝大家了
--
有違板規 請告知
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.113.183.194
※ 編輯: BearWu 來自: 59.113.183.194 (01/05 01:14)
--
┌─────◆KKCITY◆─────┐▇─┐KKADSL→六星級優質連線服務
│ bbs.kkcity.com.tw │┴ └─▇ 馬上申請帶你上網環遊全世界!
└──《From:220.138.48.224 》──┘ KKADSL ┴  http://adsl.kkcity.com.tw 
--

Loading...