拼多多校招编程题--大整数相乘(Java实现)
题目描述
有两个用字符串表示的非常大的大整数,算出他们的乘积,也是用字符串表示。不能用系统自带的大整数类型。
思路:
(1)参考乘法计算,随机取一个乘数1,并从后向前遍历i
(2)用另外一个乘数2,并从后向前遍历j,用i乘j,遍历到j的十位时,记得在末位加一个0,百位加2个,千位加3个,依次下去。
(3)每遍历一个字符,得到一个结果并放入数组
(4)取这个数组最后一个字符串就是最长的字符串,以其长度为基准,向数组中其他元素前面添加一定数量的‘0’,保证所有元素的长度相等
(5)然后,遍历该数组,从后向前遍历字符串,每个纵列相加,结果对10分别取整和取余数,整进1位即在下次计算纵列相加时加上这个数,余则赋值当前索引位置字符
(6)如果遍历完成后,进位仍然大于0,就在字符串前面加上这个进位字符,此时针对(乘数1)乘(乘数2)个位已经算完成
(7)后面就是遍历所有乘数1了,方法和前面一样
(8)注意,到最后,得到(乘数2)乘(乘数1)乘所有字符的数组,该数组长度是乘数1字符的长度,在初始化时需要注意,当然也可以使用ArrayList。
以上思路,是我个人的,仅供参考,代码如下:
import java.util.Scanner;public class Main {
// 前面少的补'0'static String[] addZero(String[] s) {int lastCharLength = s[s.length - 1].length();for (int i = 0; i < s.length - 1; i++) {StringBuilder temp1 = new StringBuilder();for (int j = 0; j < lastCharLength - s[i].length(); j++) {temp1.append('0');//位数大的后面补0}s[i] = temp1.toString() + s[i];}return s;}static String[] cal2(String s1, char c1, int eLength) {int index = s1.length() - 1, e = 0;char[] c = s1.toCharArray();String[] s = new String[c.length];while (index > -1) {int temp = Integer.parseInt(String.valueOf(c1)) * Integer.parseInt(String.valueOf(c[index]));StringBuilder temp1 = new StringBuilder(String.valueOf(temp));for (int i = 0; i < e + eLength; i++) {temp1.append('0');//位数大的后面补0}s[e] = temp1.toString();index -= 1;e += 1;}// 前面少的补'0'return addZero(s);}static String add(String[] s1) {int index = s1[0].length() - 1;char[] chars = new char[s1[0].length()];int pretemp = 0;while (index > -1) {int persum = 0;for (int i = 0; i < s1.length; i++) {persum += Integer.parseInt(String.valueOf(s1[i].charAt(index)));}persum += pretemp;pretemp = persum / 10;chars[index] = String.valueOf(persum % 10).charAt(0);index -= 1;}if (pretemp > 0) return String.valueOf(pretemp) + String.valueOf(chars);else return String.valueOf(chars);}public static void main(String[] args) {Scanner input = new Scanner(System.in);String line = input.nextLine();String[] lines = line.split(" ");String partLine1 = lines[0], partLine2 = lines[1];int eLength = 0;String[] strings = new String[partLine2.length()];for (int i = partLine2.length() - 1; i >= 0; i--) {String[] s = cal2(partLine1, partLine2.charAt(i), eLength);strings[eLength] = add(s);eLength += 1;}System.out.println(add(addZero(strings)));}
}
运行结果:
顺便吐槽一下,这个在线编辑器太难用了,还是本地的好用,要是考试就gg了。
拼多多校招编程题--大整数相乘(Java实现)相关推荐
- 2018 拼多多 校招真题 最大乘积
最大乘积 时间限制:1秒 空间限制:32768K 热度指数:8197 校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE. 题目描述 给定一个无序数组,包含正数. ...
- 拼多多校招算法题迷宫寻路
题目描述 假设一个探险家被困在了地底的迷宫之中,要从当前位置开始找到一条通往迷宫出口的路径.迷宫可以用一个二维矩阵组成,有的部分是墙,有的部分是路.迷宫之中有的路上还有门,每扇门都在迷宫的某个地方有与 ...
- 拼多多2018校招内推编程-大整数相乘
编程题] 大整数相乘 时间限制:1秒 空间限制:32768K 有两个用字符串表示的非常大的大整数,算出他们的乘积,也是用字符串表示.不能用系统自带的大整数类型. 输入描述: 空格分隔的两个字符串,代表 ...
- 拼多多2018校招编程题
[编程题] 最大乘积 给定一个无序数组,包含正数.负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1) 输入描述: 无序整数数组A[n] 输出描述: 满足 ...
- 2018拼多多校招【大整数相乘】Python解法
思路 大整数相乘,其实完全套用了列竖式计算乘法的思路,重点就是讲竖式计算这一过程用代码表示.竖式计算中,一个乘数会和另一个乘数逐位相乘,从个位到最高位,相乘的结果依次左移一位,最后将多个计算结果相加即 ...
- 2018拼多多内推校招编程题
最大乘积 时间限制:1秒 空间限制:32768K 给定一个无序数组,包含正数.负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度: O(n),空间复杂度:O(1) 输入描述: 无序整数数 ...
- python 拼多多_python 拼多多_拼多多2018校招编程题汇总 Python实现
列表补全 在商城的某个位置有一个商品列表,该列表是由L1.L2两个子列表拼接而成.当用户浏览并翻页时,需要从列表L1.L2中获取商品进行展示.展示规则如下: 用户可以进行多次翻页,用offset表示用 ...
- python 拼多多_拼多多2018校招编程题汇总 Python实现
列表补全 在商城的某个位置有一个商品列表,该列表是由L1.L2两个子列表拼接而成.当用户浏览并翻页时,需要从列表L1.L2中获取商品进行展示.展示规则如下: 用户可以进行多次翻页,用offset表示用 ...
- 2020年拼多多校招面试题及答案-最全最新-持续更新中(2)
大家好我是好好学习天天编程的天天 一个整天在互联网上种菜和砍柴的程序员~ 2020年拼多多校招面试题及答案-最全最新-持续更新中(2) 2020年拼多多校招面试题一面 2020年拼多多校招面试题一面- ...
最新文章
- [CareerCup] 8.5 Online Book Reader System 在线读书系统
- simulink传递函数_又见Simulink库模型之(6):查找表
- java安全编码实践总结
- zklib php,php 安装zookeeper扩展报错
- (c语言)求满足表达式1+2+3+.......+n<=1000的最大的n
- crmeb重新安装_CRMEB系统安装访问不了
- ISO26262道路车辆功能安全标准-(1)适用范围
- 笔记本无线网卡开启wifi方法
- mui+html5+实现扫描二维码操作
- 玩家交互体验—剑网3聊天系统
- MT7628路由器工作原理,MT7628处理器相关参数介绍
- ArcGIS——GIS中的坐标系
- 用Vue实现小Q聊天机器人(二)
- Kt学习笔记(九)数据类、封闭类
- maven中hibernate-core和struts2-core中javassist解决办法(cannot be cast to javassist.util.proxy.Proxy)
- V8常见去优化原因一览
- OPPO Find7 system分区教程
- Kaggle: ImageNet Dog Breed Classification (Pytorch)
- 龙岭迷窟真的这么好看?今天我们就用 Java 爬取豆瓣数据好好分析一下!
- 使用内存盘加快开发效率 (UltraRAMDisk,Jetbrains Idea,java)