昨天经历了华为2018笔试的都应该记得这道题吧。
输入两个大整数,输出两数乘积。
在此,先介绍python写法,因为python支持的大整数是无限位数的。
x = input(); y = input(); print(int(x) * int(y))
JAVA常用类库也有一个支持大整数的类:BigInteger
public class Main { public static void main(String []args){ Scanner scanner = new Scanner(System.in); BigInteger x = scanner.nextBigInteger(); BigInteger y = scanner.nextBigInteger(); System.out.println(x.multiply(y)); } }
那么问题来了,如果你这两种都不知道怎么呢?那就只能用Strign类型按位运算了。
public class Main { public static String cal(String num1,String num2){ int l = num1.length(); int r = num2.length(); int [] num = new int[l+r]; for (int i = 0; i < l; i++) { int n1 = num1.charAt(l-1-i)-'0'; int temp = 0; for (int j = 0; j < r; j++) { int n2 = num2.charAt(r-1-j)-'0'; temp = temp + num[i+j]+n1*n2; num[i+j] = temp % 10; temp /= 10; } num[i+r] = temp; } int i = l+r-1; while(i>0 && num[i] == 0){ i--; } String res = ""; while(i >= 0){ res = res + num[i--]; } return res; } public static void main(String []args){ Scanner s = new Scanner(System.in); String xString = s.nextLine(); String yString = s.nextLine(); System.out.println(cal(xString,yString)); } }