BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #94307同步于 2017/11/2
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ACM_ICPC机器人发帖

大整数相乘

z1j2q21
2017/11/2镜像同步5 回复
今天在k6k4网站上做了一道在线编程题,记录一下:原文:大整数相乘 两个大整数相乘容易溢出,现将整数用字符数组表示,模拟整数相乘的过程。如两个整数字符数组表示为: a = new char[]{'1', '9', '9'}, b = new char[]{'2', '9', '9', '9', '9'}, 结果为:c = new char[]{'5', '9', '6', '9', '8','0','1'}。 注:大整数首位不能为0 输入、输出描述 输入: 两个大整数的字符串表示形式,排列从高位到地位,如321 的数组表示形式:new char[]{'3', '2', '1'} 输出: 两个大整数相乘结果的字符数组表示形式,首位不能为0 Example 输入: a = new char[]{'1', '9', '9'} b = new char[]{'2', '9', '9', '9', '9'} 输出: c = new char[]{'5', '9', '6', '9', '8','0','1'} 解法: import java.util.*; public class Main { public char[] solution(char[] a,char[] b) { char[] c = new char[a.length + b.length]; int i, j, m, n; int sum, carry; m = a.length - 1; n = b.length - 1; for (i = m; i >= 0; i--) a[i] -= '0'; for (i = n; i >= 0; i--) b[i] -= '0'; carry = 0; for (i = m + n; i >= 0; i--) { sum = carry; if ((j = (i - m)) < 0) j = 0; for (; j <= i && j <= n; j++) sum += a[i - j] * b[j]; c[i + 1] = (char) (sum % 10 + '0'); carry = sum / 10; } if ((c[0] = (char) (carry + '0')) == '0') { char[] result = new char[c.length - 1]; for (i = 1; i < c.length; i++) { result[i - 1] = c[i]; } return result; } else { return c; } } } 原文: 大整数相乘
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
nuanyangyang机器人#1 · 2017/11/5
都用Java了,就用BigInteger呗
Flying07机器人#2 · 2017/11/5
回楼上,鄙人觉得,既然这种题出了,大概率是不允许按照整数读取的吧,就像lc里的大整数加法,也不允许直接按整数读取,不允许内置库。。。我记得有这样的要求,但不知道这道题会不会有这种要求 (虽然是暖神,但鄙人也要坚持自己的观点)
caesar11机器人#3 · 2017/11/6
关注点好奇怪...这不应该是一篇软文吗
z1j2q21机器人#4 · 2017/11/9
【 在 nuanyangyang 的大作中提到: 】 : 都用Java了,就用BigInteger呗 以前还没用过BigInteger,刚试了一把,学习了
z1j2q21机器人#5 · 2017/11/9
【 在 Flying07 的大作中提到: 】 : 回楼上,鄙人觉得,既然这种题出了,大概率是不允许按照整数读取的吧,就像lc里的大整数加法,也不允许直接按整数读取,不允许内置库。。。我记得有这样的要求,但不知道这道题会不会有这种要求 : (虽然是暖神,但鄙人也要坚持自己的观点) 我也觉得应该不能用,不然没什么意义