int64问题(代码采用java编程)

刚做了一道关于int64大数相乘的运算,简直是被秀了智商,现在想明白了,下面做下解析-->:
关于两个大数相乘,因为范围超过long型范围(10^100),不能直接计算,只能转成字符串形式,利用乘法的原理(就在这里觉得自己超笨的,哭)
例如:234*200.(分别为n1位数和n2位数)
1、首先,对于计算结果,一定是在一个5(n1+n2-1)位或者6(n1+n2)位之间,所以结果放在一个长度为(n1+n2)的int型数组result[]里;
2、乘法原理:
2    3   4
2    0   0
8    0    0
6     0    0
4    0    0
看着很简单,但这个就是能够实现超大数之间的运算的原理。
3、步骤:取出第一个数的个位数依次和第二个数的每一位数相乘,比如4*0,0,2,,得到的结果依次放到result数组的尾端(从n1+n2往0算),但是有时候相乘的数会大于10,那么其与10取余的部分留在原位,取整的部分则向前进位;
4、再取出第一个数的十位数字重复上面的步骤,依次取到第一位数的最高位,注意,每一次得到的结构末端都要往前移动一位(可参见代码里面的循环);
最后得出结果就是运算结果,但是如果计算结果只有n1+n2-1位,则需要将最高位的0剔除(如例子结果result={0,4,6,8,0,0}),然后输出就是最终结果。

代码是参考得来的(仅供参考):
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
String num1=in.nextLine();
String num2=in.nextLine();
int len1=num1.length()-1;
int len2=num2.length()-1;

int[] mul=new int[len1+len2+2];//存放结果,两数相乘的位数小于两数的位数和+2
//实现乘法的原理过程
for(int i=len1;i>=0;--i) {
for(int j=len2;j>=0;--j) {
int bitmul=(num1.charAt(i)-'0')*(num2.charAt(j)-'0');
bitmul+=mul[i+j+1];//先加上低位,判断是否有新的进位

mul[i+j]+=bitmul/10;
mul[i+j+1]=bitmul%10;
}
}
//打印和去0
StringBuilder sb=new StringBuilder();
if(mul[0]!=0) {
sb.append(mul[0]);
}
for(int i=1;i<mul.length;i++) {
sb.append(mul[i]);
}
System.out.println(sb);
}
}
就这样吧,如有问题,请不吝赐教。(😔
#笔试题目##Java工程师#
全部评论
大佬大佬
点赞 回复
分享
发布于 2019-08-21 10:01
这就是高精度呀
点赞 回复
分享
发布于 2019-08-20 22:49
联想
校招火热招聘中
官网直投

相关推荐

点赞 7 评论
分享
牛客网
牛客企业服务