`
ikon
  • 浏览: 107819 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

计算任意2个正整数的乘积

 
阅读更多

接上一篇整数的阶乘算法,来计算2个正整数的乘积;

算法如下:

  1. 用被乘数的右边第一位去乘乘数,每位的结果放入集合;然后从低位到高位进行满十进位;
  2. 用被乘数的右边第二位去乘乘数,每位的结果向左错一位放入集合;然后从低位到高位进行满十进位;
  3. 以此类推。。。。

具体代码如下:

 

package com.datastruct.array;

import java.util.ArrayList;
import java.util.List;

/**
 * 计算任意2个正整数相乘
 * @author ikon
 *
 */
public class Multi {
	public static void main(String[] args){
		
		ConsoleReader console = new ConsoleReader(System.in);
		System.out.print("请输入乘数 : ");
		String num1 = console.readLine();
		System.out.print("请输入被乘数 : ");
		String num2 = console.readLine();
		
		List<Integer> datas = new ArrayList<Integer>();
		
		
		int digit = num2.length();
		for(int i=0;i<digit;i++){
			int num2i = Integer.parseInt(num2.substring(digit-1-i, digit-i));
			
			for(int j=0;j<num1.length();j++){				
				int num1i = Integer.parseInt(num1.substring(num1.length()-1-j, num1.length()-j));
				if(datas.size()==(j+i)){
					datas.add(0);
				}
				datas.set(i+j, datas.get(i+j)+num1i*num2i);
			}
			
			
			for(int j=0;j<datas.size();j++){
				if(datas.get(j)>9){
					if(datas.size()==j+1){  
						datas.add(j+1,0);  //这里要注意进位,调用add
					}
					datas.set(j+1, datas.get(j+1)+datas.get(j)/10);
					datas.set(j, datas.get(j)%10);
				}
			}		
			
			
			
		}
		
		System.out.print(num1+"*"+num2+"=");
		for(int index=datas.size()-1;index>-1;index--){
			System.out.print(datas.get(index));
		}
		
	}
}

 

 

BigInteger补充:

 

 

package com.datastruct.array;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;

/**
 * 计算任意2个正整数相乘
 * BigInteger版
 * @author ikon
 *
 */
public class MultiBigInteger {
	public static void main(String[] args){
		
		ConsoleReader console = new ConsoleReader(System.in);
		System.out.print("请输入乘数 : ");
		String num1 = console.readLine();
		System.out.print("请输入被乘数 : ");
		String num2 = console.readLine();
		
		BigInteger a = new BigInteger(num1);
		BigInteger b = new BigInteger(num2);
		
		System.out.print(num1+"*"+num2+"="+a.multiply(b));	
		
	}
}

 

0
1
分享到:
评论
2 楼 ikon 2011-11-13  
两个乘数没有转成integer,而是当成字符串;BigInteger确实封装了,我修改下;
1 楼 kidding87 2011-11-12  
效率不是很高,思路没有问题,但是你的两个乘数输入都都转为Integer么,Integer的范围不够吧
java里面已经有对这个的算法的封装了,看看BigInteger的方法吧

相关推荐

    python 给你一个正整数列表 L, 判断列表内所有数字乘积的最后一个非零数字的奇偶性。如果为奇数输出1,偶数则输出0。

    # 给你一个正整数列表 L, 判断列表内所有数字乘积的最后一个非零数字的奇偶性。如果为奇数输出1,偶数则输出0。 # 输入示例 # 输入:L=[2,8,3,50] # 输出示例 # 输出:0 # 解析 # 在上题的基础上的改造题, 这里直接...

    计算两个正整数的最小公倍数

    这时可以扩展算法,先计算任意两个数的最小公倍数,然后依次与其他数求最小公倍数,直至处理完所有数。这种方法称为“逐步扩展法”。 总之,计算两个正整数的最小公倍数是基础数学和计算机科学中的常见问题。理解并...

    编程Java求任意一个正整数的阶乘.doc

    在数学运算中,阶乘是一个非常重要的概念,它是指一个正整数的连续乘积。例如,5的阶乘是5*4*3*2*1=120。在Java语言中,我们可以使用不同的循环结构来实现正整数的阶乘,下面我们将介绍两种常见的方法。 方法一:...

    计算任意数阶乘的算法及实现,详细分析

    因此,为了能够计算任意大小的正整数的阶乘,我们需要设计一种特殊的算法。 #### 二、算法设计思路 本文介绍了一种用于计算任意大小的正整数阶乘的算法。该算法主要通过使用整型数组来存储大数,并通过一系列辅助...

    java 求任意一个正数的阶乘

    在编程领域,阶乘是一个常见的数学概念,通常用于计算组合数和概率问题。...综上所述,无论选择循环还是递归,Java都能有效地计算任意正整数的阶乘。理解这两种方法的原理和应用场景,对提升编程能力大有裨益。

    二元一次方程求整数解,求正整数解

    欧几里得原理的核心思想是:对于任意两个正整数a和b(a&gt;b),它们的最大公约数等于a除以b的余数和b之间的最大公约数。我们可以利用这个原理,通过迭代的方式找到满足方程的整数解。 为了实现这个算法,我们首先需要...

    两个十进制数相乘并显示乘积

    ### 十进制数相乘并显示乘积 本文将详细介绍如何通过汇编语言实现一个多位十进制数与一个单个十进制数相乘,并将结果以十进制形式显示在屏幕上的过程。本示例代码适用于早期的DOS环境。 #### 1. 代码结构与初始化 ...

    c代码-输入两个正整数m和n,求其最大公约数和最小公倍数。

    通过这个简单的C程序,我们可以高效地计算任意两个正整数的最大公约数和最小公倍数。在实际应用中,这种基本的算法知识是程序员必备的技能,它不仅有助于理解更复杂的算法,而且在处理数据和优化程序时也十分有用。

    建一个控制台应用程序,要求输入数字n后,输出1!+2!+…+n!的结果

    综上所述,通过结合C#的循环、数学运算、用户交互和数值序列处理,我们可以构建出一个能够根据用户输入的正整数n,计算并输出1!+2!+…+n!之和的控制台应用程序。这个程序不仅可以帮助初学者熟悉基本的编程概念,也...

    C#实现输入一个任意整数分解质因子

    在编程领域,分解质因子是计算科学中的一个重要概念,它涉及到将一个正整数表示为若干个质数的乘积。在C#中实现这个功能,可以帮助我们理解数字的结构,尤其是在加密算法、数论或者数学问题求解等方面。下面我们将...

    输入两个正整数m和n,求最小公倍数,与最大公约数.docx

    在计算机科学中,计算两个正整数的最大公约数(Greatest Common Divisor, GCD)和最小公倍数(Least Common Multiple, LCM)是一项基本任务,尤其在数学和算法领域有着广泛的应用。这里我们将详细探讨如何使用不同的...

    最小的能被1-20中每个数整除的正整数是多少

    对于任意两个正整数a和b,它们的最小公倍数LCM(a, b)是能够同时被a和b整除的最小正整数。 为了求解1至20的所有整数的最小公倍数,我们可以考虑以下步骤: 1. **分解质因数**:首先将1至20中的每个数字分解为质因数...

    输入两个正整数m和n,求最小公倍数,与最大公约数 (2).pdf

    本文将详细探讨如何使用编程方法计算两个正整数的最大公约数(Greatest Common Divisor, GCD)和最小公倍数(Least Common Multiple, LCM)。首先,我们来看如何用辗转相除法求最大公约数。 辗转相除法,也称为...

    输入两个正整数m和n,求最小公倍数,与最大公约数.pdf

    在编程领域,计算两个正整数的最大公约数(Greatest Common Divisor, GCD)和最小公倍数(Least Common Multiple, LCM)是基础且重要的算法问题。这两个概念广泛应用于数学、计算机科学以及工程计算中。以下是针对...

    Java求两个正整数的最大公约数和最小公倍数

    System.out.print("请输入第二个正整数:"); int b = scanner.nextInt(); int gcdResult = gcd(a, b); int lcmResult = Math.abs(a * b) / gcdResult; System.out.println("最大公约数:" + gcdResult); ...

    大数乘法运算,用于实现两个大整数之间的运算,效率非常高!

    这个压缩包中的"大数乘法.CPP"文件显然是一个实现大数乘法的C++程序,它使用了字符数组来存储大整数,并通过高效算法实现了快速的乘法运算。 大数通常用数组表示,每个数组元素存储一个位。在本例中,可能是用字符...

    求最大公约数最小公倍数的3种算法的流程图

    其基本思想是:对于任意两个正整数a和b(a&gt;b),它们的最大公约数等于a除以b的余数c与b之间的最大公约数。可以表示为GCD(a, b) = GCD(b, a % b)。当余数为0时,b即为最大公约数。以下是辗转相除法的流程图描述: - ...

    给出一个任意数,求它的阶乘

    阶乘表示的是一个正整数n的所有小于等于n的正整数的乘积,通常用“!”来表示。例如,5的阶乘(5!)就是5 * 4 * 3 * 2 * 1,等于120。本问题要求我们编写一个程序,能够接受任意输入的正整数n,并计算其阶乘。 实现...

    cpp代码-求输入两个正整数的最大公约数和最小公倍数。

    一个常见的方法是欧几里得算法(Euclidean Algorithm),其基本思想是:对于任意两个正整数a和b(a&gt;b),它们的最大公约数等于b和a除以b的余数的最大公约数。用C++实现这个算法如下: ```cpp int gcd(int a, int b)...

    大整数相乘(C++实现),理论上整数位数任意

    本项目实现了大整数相乘的功能,能够处理理论上任意长度的正整数。下面将详细介绍这个C++实现的原理和关键知识点。 1. **大整数表示**:由于标准的`int`和`long long`等数据类型无法存储超大的整数,我们通常使用...

Global site tag (gtag.js) - Google Analytics