java求两个1000位数的乘积
答案:2 悬赏:60 手机版
解决时间 2021-04-28 07:29
- 提问者网友:ミ烙印ゝ
- 2021-04-28 02:33
java求两个1000位数的乘积
最佳答案
- 五星知识达人网友:像个废品
- 2021-04-28 04:09
给你一个思路,具体实现自己完成
你可以定义两个1000长度的数组a,b来存这两个乘数
然后定义一个2001长度的数组c来存储这个结果。
for(int i=0;i<1000;i++){
for(int j=0;j<1000;j++){
c[i+j+1]=(a[j]*b[i])/10;
c[i+j]=c[i+j]+(a[j]*b[i])%10;
c[i+j+1]=c[i+j]/10;
c[i+j]=c[i+j]%10;
}
}
for(int k=2001;k>=0;k--){
System.out.print(c[k]);
}
上面是大概的思路,记住c[]在使用之间每个元素都要赋值为0
c[i+j+1]=(a[j]*b[i])/10;表示a的j位与b的i位相乘的十位上的数字存到c对应的上一位表示进位
c[i+j]=c[i+j]+(a[j]+b[i])%10;c[i+j]可能有下面进位上来的,在加上a的j位与b的i位相乘的个位上的数字就是此时c对位位置上的得数
c[i+j+1]=c[i+j]/10;c[i+j]=c[i+j]%10;
为了防止c在上一步[c[i+j]=c[i+j]+(a[j]+b[i])%10;]后又发生了进位,所以在执行此步
for(int k=2001;k>=0;k--){
System.out.print(c[k]);
}
表示从高位依次打印出此数
自己想办法不显示高位为0的情况
大体思路就是如此
具体细节自己进行优化
你可以定义两个1000长度的数组a,b来存这两个乘数
然后定义一个2001长度的数组c来存储这个结果。
for(int i=0;i<1000;i++){
for(int j=0;j<1000;j++){
c[i+j+1]=(a[j]*b[i])/10;
c[i+j]=c[i+j]+(a[j]*b[i])%10;
c[i+j+1]=c[i+j]/10;
c[i+j]=c[i+j]%10;
}
}
for(int k=2001;k>=0;k--){
System.out.print(c[k]);
}
上面是大概的思路,记住c[]在使用之间每个元素都要赋值为0
c[i+j+1]=(a[j]*b[i])/10;表示a的j位与b的i位相乘的十位上的数字存到c对应的上一位表示进位
c[i+j]=c[i+j]+(a[j]+b[i])%10;c[i+j]可能有下面进位上来的,在加上a的j位与b的i位相乘的个位上的数字就是此时c对位位置上的得数
c[i+j+1]=c[i+j]/10;c[i+j]=c[i+j]%10;
为了防止c在上一步[c[i+j]=c[i+j]+(a[j]+b[i])%10;]后又发生了进位,所以在执行此步
for(int k=2001;k>=0;k--){
System.out.print(c[k]);
}
表示从高位依次打印出此数
自己想办法不显示高位为0的情况
大体思路就是如此
具体细节自己进行优化
全部回答
- 1楼网友:低音帝王
- 2021-04-28 05:45
用 BigInteger 类或BigDecimal类来解决。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯