B.r
2007-01-04 17:14:49 UTC
最近在寫一題程式 還不太懂 經過老師講解之後有比較了解
題目的本意 是要以長整數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)
題目的本意 是要以長整數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)