`
smiky
  • 浏览: 257826 次
  • 性别: Icon_minigender_1
  • 来自: 天门
社区版块
存档分类
最新评论

大数相乘

 
阅读更多

两个大数相乘,

public class BigNumberMultiplication
{
	public static void main(String[] args)
	{
		//number1*number2
		String number1 = "3412522345234564578567856783652356239103489162389461293461923549125364785127834512345234523563456457645764562344523451234";
		String number2 = "12341235234536745764785678567634563454123412346192364923";
		long start = System.nanoTime();
		System.out.println(myMultiplication(number1,number2));
		long end = System.nanoTime();
		System.out.println(end - start);
	}
	
	public static String myMultiplication(String number1,String number2){
		
		StringBuffer result = new StringBuffer();//存放最终结果
		
		int number1Length = number1.length();//被乘数
		int number2Length = number2.length();//乘数
		
		char[] number1CharArray = number1.toCharArray();
		char[] number2CharArray = number2.toCharArray();
		int[] number1IntArray = new int[number1Length];
		int[] number2IntArray = new int[number2Length];
		
		for(int i=0;i<number1Length;i++){
			number1IntArray[i] = number1CharArray[i]-48;//将char的ascii转成对应的数字
		}
		
		for(int i=0;i<number2Length;i++){
			number2IntArray[i] = number2CharArray[i]-48;
		}
		
		int[] tempResult = new int[number1Length+1];//存入临时结果,每一次相乘结果最大比被乘数多一位
		
		for(int i=number2Length-1;i>=0;i--){
			
			int carry = 0;//进位
			
			for(int j=number1Length-1;j>=0;j--){
				int temp = number1IntArray[j]*number2IntArray[i]+carry+tempResult[j];
				carry = 0;
				if(temp>9){
					carry = temp/10;
				}
				tempResult[j+1] = temp%10;
			}
			
			tempResult[0] = carry;
			result.append(tempResult[number1Length]);
		}
		
		for(int i=tempResult.length-2;i>=0;i--){//最后一位己经加到结果中,剩下的才是需要的
			if(i==0&&tempResult[0]==0){
				continue;
			}
			result.append(tempResult[i]);
		}
		return result.reverse().toString();
	}
}
 

 

分享到:
评论

相关推荐

    大数相乘_大数相乘_python_分治_

    本篇文章将深入探讨大数相乘的实现方法,特别是使用分治策略。 大数相乘的传统方法是通过简单的乘法规则,如竖式乘法,但这在面对非常大的数字时效率低下。分治算法提供了一种更高效、更优雅的解决方案。分治法的...

    大数运算 大数相加 大数相乘

    本篇文章将详细介绍如何用C/C++实现大数相加和大数相乘。 首先,我们要理解大数的概念。在计算机内部,基本的数据类型如int、long等都有其存储范围限制,对于超出这些范围的整数,就需要用到大数表示。在C/C++中,...

    大数相乘解决无限位数相乘问题

    在计算机科学领域,大数相乘是处理超过标准整型或浮点型变量所能表示的数值范围时必须面对的问题。这种技术广泛应用于金融计算、密码学、物理学模拟、工程问题等多个领域,尤其在处理无限位数(即非常大的数字)相乘...

    汇编之大数相乘

    通过汇编语言实现大数相乘,作业,调试成功

    大数相乘算法c语言

    在计算机科学中,大数相乘是处理超过标准整型数据范围的数字乘法问题。在C语言中,由于标准库并不直接支持大数运算,我们需要自己实现算法来处理这样的计算。这种算法通常涉及到数组或者链表来存储大数,并通过...

    大数相乘的C语言实现程序

    实现了两个大数相乘的小程序,数组大小可自行指定,欢迎大家进行验证

    大数相乘c语言

    标题“大数相乘c语言”和描述“两个超过计算机所能表示的数相乘,利用数组存储大数,进行相乘”所提及的就是这种技术。 大数相乘的基本思路是将每个大数拆分成数组中的每一位,然后按照传统的笔算乘法方法进行计算...

    大数相乘,算法源码分析及实现

    本主题将深入探讨大数相乘的算法原理、源码分析及其实现。 大数相乘的基本思路通常包括以下几种方法: 1. **基础位操作**:这是最直接的方法,类似于小学时学习的竖式乘法。每一对对应的位相乘后累加,但这种做法...

    LINUX下的大数相乘汇编程序的设计.pdf

    【Linux下的大数相乘汇编程序设计】 在Linux操作系统环境下,大数相乘的汇编程序设计是一项挑战性的任务,因为涉及到低级别的计算和内存管理。Linux以其自由、免费和开放源代码的特性,以及高效能和稳定安全的运行...

    三个不同大数相乘算法源代码

    大数相乘算法源代码大数相乘算法源代码大数相乘算法源代码大数相乘算法源代码大数相乘算法源代码大数相乘算法源代码大数相乘算法源代码大数相乘算法源代码大数相乘算法源代码大数相乘算法源代码大数相乘算法源代码...

    C/C++实现两个大数相乘源代码

    C/C++实现两个大数相乘的源代码,同理可以实现两个无限小数的相乘,实现原理都是一样的。看代码就能写出来。

    简单大数相乘,用数组存数

    本主题聚焦于“简单大数相乘”,通过数组存储数,这通常涉及到字符数组来表示大数,因为传统的数据类型如int、long等无法容纳超过其范围的数值。以下是对这个知识点的详细解释: 首先,我们需要理解大数相乘的基本...

    数据结构课程设计大数相乘

    数据结构课程设计大数相乘是一项常见的编程任务,它涉及到计算机科学中的算法设计与实现,特别是在数据处理和计算效率方面。在这个项目中,主要的知识点包括大数表示、大数运算以及C语言的基础编程技巧。 首先,...

    大数相乘代码及解析

    ### 大数相乘代码及解析 #### 一、引言 在计算机科学中,大数运算是一项重要的技术,尤其当涉及到超出标准整型或浮点型数据范围的数值时。传统的乘法算法(如小学教的竖式乘法)在处理大数时效率较低,而且很容易...

    用C语言实现两大数相乘

    两大数相乘,算法,数组,C语言.。。。。。。

    用c语言实现大数相乘

    根据给定的文件信息,我们可以总结出以下关于“用C语言实现大数相乘”的相关知识点: ### 一、背景介绍 在计算机科学领域,处理非常大的数字常常超出了标准整型数据类型所能容纳的范围。例如,在C语言中,一个`...

    C++实现大数相乘

    在实际的大型的数学相乘运算中,往往数字的位数较多,造成一般计算器乃至科学计算器都无法完成计算,为科学研究和事业带来一定的麻烦,因此为了解决这种普通的计算设备所完成不了的计算,就设计了这个大数相乘程序,...

    数据结构课程设计大数相乘与多项式相乘.doc

    "数据结构课程设计大数相乘与多项式相乘" 本资源主要介绍了数据结构课程设计大数相乘与多项式相乘的实现方法。通过对大数相乘和多项式相乘的设计思路、数据结构设计、功能函数设计、程序代码等方面的详细介绍,...

    数据结构课程设计(c++编写完成的大数相乘)

    在这个课程设计中,我们关注的是使用C++编程语言实现大数相乘的功能,这是一种常见的算法问题,特别是在处理超过普通整型变量范围的大整数时。 大数相乘的算法可以分为多种,包括简单的按位乘法、Karatsuba算法、...

Global site tag (gtag.js) - Google Analytics