题目描述

有两个用字符串表示的非常大的大整数,算出他们的乘积,也是用字符串表示。不能用系统自带的大整数类型。

思路:

(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实现)相关推荐

  1. 2018 拼多多 校招真题 最大乘积

    最大乘积 时间限制:1秒 空间限制:32768K 热度指数:8197 校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE. 题目描述 给定一个无序数组,包含正数. ...

  2. 拼多多校招算法题迷宫寻路

    题目描述 假设一个探险家被困在了地底的迷宫之中,要从当前位置开始找到一条通往迷宫出口的路径.迷宫可以用一个二维矩阵组成,有的部分是墙,有的部分是路.迷宫之中有的路上还有门,每扇门都在迷宫的某个地方有与 ...

  3. 拼多多2018校招内推编程-大整数相乘

    编程题] 大整数相乘 时间限制:1秒 空间限制:32768K 有两个用字符串表示的非常大的大整数,算出他们的乘积,也是用字符串表示.不能用系统自带的大整数类型. 输入描述: 空格分隔的两个字符串,代表 ...

  4. 拼多多2018校招编程题

    [编程题] 最大乘积 给定一个无序数组,包含正数.负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)  输入描述: 无序整数数组A[n] 输出描述: 满足 ...

  5. 2018拼多多校招【大整数相乘】Python解法

    思路 大整数相乘,其实完全套用了列竖式计算乘法的思路,重点就是讲竖式计算这一过程用代码表示.竖式计算中,一个乘数会和另一个乘数逐位相乘,从个位到最高位,相乘的结果依次左移一位,最后将多个计算结果相加即 ...

  6. 2018拼多多内推校招编程题

    最大乘积 时间限制:1秒 空间限制:32768K 给定一个无序数组,包含正数.负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度: O(n),空间复杂度:O(1) 输入描述: 无序整数数 ...

  7. python 拼多多_python 拼多多_拼多多2018校招编程题汇总 Python实现

    列表补全 在商城的某个位置有一个商品列表,该列表是由L1.L2两个子列表拼接而成.当用户浏览并翻页时,需要从列表L1.L2中获取商品进行展示.展示规则如下: 用户可以进行多次翻页,用offset表示用 ...

  8. python 拼多多_拼多多2018校招编程题汇总 Python实现

    列表补全 在商城的某个位置有一个商品列表,该列表是由L1.L2两个子列表拼接而成.当用户浏览并翻页时,需要从列表L1.L2中获取商品进行展示.展示规则如下: 用户可以进行多次翻页,用offset表示用 ...

  9. 2020年拼多多校招面试题及答案-最全最新-持续更新中(2)

    大家好我是好好学习天天编程的天天 一个整天在互联网上种菜和砍柴的程序员~ 2020年拼多多校招面试题及答案-最全最新-持续更新中(2) 2020年拼多多校招面试题一面 2020年拼多多校招面试题一面- ...

最新文章

  1. [CareerCup] 8.5 Online Book Reader System 在线读书系统
  2. simulink传递函数_又见Simulink库模型之(6):查找表
  3. java安全编码实践总结
  4. zklib php,php 安装zookeeper扩展报错
  5. (c语言)求满足表达式1+2+3+.......+n<=1000的最大的n
  6. crmeb重新安装_CRMEB系统安装访问不了
  7. ISO26262道路车辆功能安全标准-(1)适用范围
  8. 笔记本无线网卡开启wifi方法
  9. mui+html5+实现扫描二维码操作
  10. 玩家交互体验—剑网3聊天系统
  11. MT7628路由器工作原理,MT7628处理器相关参数介绍
  12. ArcGIS——GIS中的坐标系
  13. 用Vue实现小Q聊天机器人(二)
  14. Kt学习笔记(九)数据类、封闭类
  15. maven中hibernate-core和struts2-core中javassist解决办法(cannot be cast to javassist.util.proxy.Proxy)
  16. V8常见去优化原因一览
  17. OPPO Find7 system分区教程
  18. Kaggle: ImageNet Dog Breed Classification (Pytorch)
  19. 龙岭迷窟真的这么好看?今天我们就用 Java 爬取豆瓣数据好好分析一下!
  20. 使用内存盘加快开发效率 (UltraRAMDisk,Jetbrains Idea,java)

热门文章

  1. 计算机键盘上clr是什么意思,CLR是什么意思
  2. druid.io index_realtime任务的hand off:仍然是源码+log说清楚
  3. Android下载管理问题分析
  4. 5G室内小型基站行业现状调研及趋势分析报告
  5. 打字速度单位WPM、KPM定义与计算方法
  6. 如何选购一台笔记本电脑
  7. 校招进大厂的Tips
  8. 闲扯Maven项目代码组织形式
  9. TensorRT(7):python版本使用入门
  10. selenium定位H5表单验证的提示语