实现大数乘法,输入是两个字符串如
n1 = '340282366920938463463374607431768211456'
n2 = '340282366920938463463374607431768211456'
输出
'115792089237316195423570985008687907853269984665640564039457584007913129639936'
要求:不能使用对大数相乘有内建支持的语言;需要包含对输入字符串的合法性校验
一行,两个非负整数n1,n2,保证|n1|+|n2|<10000,其中|n|是n作为字符串的长度
输出n1*n2的结果
340282366920938463463374607431768211456 340282366920938463463374607431768211456
115792089237316195423570985008687907853269984665640564039457584007913129639936
给出的数据均是合法的,但仍建议您对输入的字符串进行合法性校验
Java 版本,参考了几位大佬的回答。
//package cn.practice.niuke; import java.util.Scanner; /** * 大数相乘。 * 给出的数据均是合法的,但仍建议您对输入的字符串进行合法性校验 * 远远超出 longest. */ public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String s1 = scanner.next(); String s2 = scanner.next(); // 先不做校验。 int sumLen = s1.length() + s2.length(); int[] res = new int[sumLen]; for(int i = 0; i< s1.length(); i++) { int num1 = s1.charAt(s1.length() -1 - i ) - '0'; for(int j = 0; j< s2.length(); j++) { int num2 = s2.charAt(s2.length() -1 - j) - '0'; res[i +j ] += num1 * num2; } } for(int i = 0; i< res.length - 1; i++) { if(res[i] >= 10) { res[i+1] += res[i] / 10; res[i] %= 10; } } int i = res.length -1; for(; i> 0 && res[i] == 0; i--) {} // 去除结果前面的 0 StringBuilder sb = new StringBuilder(); for(; i>=0; i--) { sb.append(res[i]); } System.out.println(sb.toString()); } }