在搞ACM的时候遇到大数相乘的问题,在网上找了一下,看到了一个c++版本的

http://blog.csdn.net/jianzhibeihang/article/details/4948267

用java搞了一个版本

这里说一下思路

将数字已字符串形式接收,转换成int[]整型数组,然后num1[],num2[]依次相乘,结果保存到result[]中

其他注意的在注释中有说明

 package com.gxf.test;

 import java.util.Scanner;

 public class BigDataMultiply {

     public static void main(String[] args) {
final int N = 100;//最大为100位数字相乘
Scanner scanner = new Scanner(System.in); int num1[] = getNum(scanner);//保存第一个数12345
int num2[] = getNum(scanner);//保存第二个数12345 int result[] = new int[2 * N];
//第一个数12345每一位乘以第二个数12345的每一位,得到的结果放到result[]中
//注意5乘以每一位数字保存在result[0] [1] [2] [3] [4]中
//4乘以每一位数字时要加上[1] [2] [3] [4]中的值
for(int i = 0; i < num1.length; i++){
for(int j = 0; j < num2.length; j++){
result[i + j] += num1[i] * num2[j];
}
}//得到的结果还需进位和移位处理
//进位和移位处理
for(int i = 0; i < 2 * N - 1; i++){
result[i + 1] += result[i] / 10;
result[i] = result[i] % 10;
}
//找出结果长度
int length = 2 * N -1;
while(result[length] == 0)
length--;
//输出结果 注意先输出高位 最高位保存在数组的高下标中
for(int i = length; i >= 0; i--){
System.out.print(result[i] + " ");
}
scanner.close();
}
public static int[] getNum(Scanner scanner){
final int N = 100;
int num[] = new int[N];
char array_char[];
String str_num = "";
//Scanner scanner = new Scanner(System.in);//用于接收输入 str_num = scanner.next();
array_char = str_num.toCharArray();//字符串12345已经转换成字符数组
//将字符数组转换成Int数组
int length = array_char.length;
for(int i = 0; i < array_char.length; i++){
num[length - i - 1] = array_char[i] - '0';//这里注意保存的位置 高位保存在数组高下标中 低位保存在数组低下标中
//因为后面计算的时候是从低下标中的
//num[i] = array_char[i]
}
//scanner.close();
return num;
}
}

ps:为什么这里result[]大小是2*N,假设两个数是3位数,如565 * 898不可能大过1000 * 1000,而1000 * 1000的位数刚好是 2 * 3 = 6位

java版大数相乘的更多相关文章

  1. 用Java进行大数处理(BigInteger)-hdu1042

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1042 题目描述: 代码实现: import java.util.Scanner; import jav ...

  2. POJ 2389 Bull Math(水~Java -大数相乘)

    题目链接:http://poj.org/problem?id=2389 题目大意: 大数相乘. 解题思路: java BigInteger类解决 o.0 AC Code: import java.ma ...

  3. Java实现大数相加、相乘(不使用BigInteger)

    大数相加: package algorithm; //使用BigInteger类验证 import java.math.BigInteger; public class BigAdd { public ...

  4. 大数相乘算法C++版

    #include <iostream> #include <cstring> using namespace std; #define null 0 #define MAXN ...

  5. Java 大数相乘、大数相加、大数相减

    思路来源:: https://blog.csdn.net/lichong_87/article/details/6860329 /** * @date 2018/6/22 * @description ...

  6. 华为上机测试题(大数相乘-java)

    PS:这个不是自己写的,测试OK,供参考. /** * 大数相乘 */ public class BigData { public static void main(String[] args) { ...

  7. Java BigInteger(大数,ACM比赛专用)

    用c或者C++处理大数比较麻烦,于是决心学习一下JAVA中大数运算. 先下载一个eclipse,具体的用法去问度娘吧 JAVA中有两个类BigInteger和BigDecimal分别表示大整数类和大浮 ...

  8. Java实现大数乘法运算

    基本思路:将输入的两个大数以字符串的形式存储,然后转化成整型数组存储,通过整型数组进行乘法运算(采用分治的思想) 即乘法分配律,如AB*CD=AC(AD+BC)BD,将两个数组逐位相乘的结果对位存放在 ...

  9. 排序算法Java版,以及各自的复杂度,以及由堆排序产生的top K问题

    常用的排序算法包括: 冒泡排序:每次在无序队列里将相邻两个数依次进行比较,将小数调换到前面, 逐次比较,直至将最大的数移到最后.最将剩下的N-1个数继续比较,将次大数移至倒数第二.依此规律,直至比较结 ...

随机推荐

  1. c++ builder TreeView控件节点遍历

    void __fastcall TForm1::GetRootNodes(TTreeView *DestTreeView)//得到所有根节点 { TTreeNode *vNode = NULL; vN ...

  2. Dell™ SAS 5/iR 集成适配器和适配器用户指南

    http://www.sxszjzx.com/~t096/manual/sc/SAS_5ir/index.htm

  3. css初涉

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. subpage和secondary page的区别

    Hi,  Can you tell me the differences between subpage and secondary  page and when to use which ? I n ...

  5. 小菜的系统框架界面设计-数据的完美呈现(DataGridView扩展)

    背景 今天在做系统报表的过程中,我想实现批量操作DataGridView中的数据,在列中加复选框,通过一个事件触发进行全选或取消,可是在外面添加按钮,这种模式虽然能够实现,但是从系统界面设计的角度,美 ...

  6. luigi学习7--running from command line

    最简单去运行一个luigi task的方式是通过luigi命令行工具. 示例代码: # my_module.py, available in your sys.path import luigi cl ...

  7. php下intval()和(int)转换有哪些区别

    想知道使用intval()和(int)转换有什么区别? 或者说两者有什么不同,包括功能.定义方面的.或者和使用频率.效率等. 复制代码代码如下: <?php  echo "<br ...

  8. 透过c的编程原则,来规范自己现在的一些编程习惯

    1.合理的使用注释 注释为:/*…………*/ 注释有以下几种情况: 1) 版本.版权声明. 2) 函数接口说明. 3) 重要的代码或者段落显示. 注释注意: 1) 注释是对代码的解释,不是对文档.注释 ...

  9. STM32F0xx_FLASH编程(片内)配置详细过程

    Ⅰ.概述 关于数据的储存,我觉得编程的人基本上都会使用到,只是看你储存在哪里.STM32的芯片内部FLASH都是可以进行编程的,也就是说可以拿来储存数据.但是,很多做一些小应用程序开发的人都没有利用好 ...

  10. DataGridView的DataGridViewCheckBox问题

    datagridview有一列DataGridViewCheckBox,但连续点击的话(1秒点击N次),会导致出错,数据处理不正确,感觉 private void dgv_CellContentCli ...