`
拓子轩
  • 浏览: 210752 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java中大数字相乘的简单实现

    博客分类:
  • java
 
阅读更多

 最近去面试,面试官问了几个不痛不痒的问题后,突然问我大数的相乘如何实现。我知道int和long都是有位数限制的,而在做金额的计算时会用到BigDecimal,另外隐约还记得有个BigInteger类,但基本上没用过,便随口说似乎BigInteger可以实现。面试官不置可否的继续问到,知不知道如何去实现。我便低头沉思起来,他不失时机的把纸笔递过来。我抓紧笔,看着面前的一张白纸,大脑也一片空白。自毕业以后,几年都没有握笔写东西了,我抬头白了他一眼,问:是不是贵公司平时写代码都是用记事本写?他说没有,你说个思路也行。我一听立马把笔扔了,含糊地说了我想到的实现方法,也不知道他有没有听清楚。回来以后到底不放心,所以又在自己的电脑上根据自己的思路去实现了一下。

 

 

public class Test {

	public static void main(String[] args) {
		
		String n1 = "1343245234523452355678578587585875678";
		String n2 = "23534523523525234534645745656823532454757876";
		System.out.println(new BigInteger(n1).multiply(new BigInteger(n2)));
		System.out.println(multiple(n1, n2));
	}
	
	public static String multiple(String n1, String n2)
	{
		char[] ns1 = n1.toCharArray();
		char[] ns2 = n2.toCharArray();
		
		int[] result = new int[n1.length() + n2.length()];
		
		for (int i = ns2.length-1; i >= 0; i--)
		{
			for (int j= ns1.length-1; j>=0; j--)
			{
				saveValue(result,(ns1.length-i-1) + (ns2.length-j-1),Integer.valueOf(String.valueOf(ns2[i])) * Integer.valueOf(String.valueOf(ns1[j])));
			}
		}
		
		StringBuffer buffer = new StringBuffer(result.length);
		boolean isLeadingZero = true;
		for (int i=result.length-1; i>=0; i--)
		{
			if (result[i]!=0)
				isLeadingZero = false;
			
			if (!isLeadingZero)
				buffer.append(result[i]);
		}
		
		return buffer.toString();
	}

	public static void saveValue(int[] result, int pos, int value)
	{
		int one = (value + result[pos]) % 10;
		int two = (value + result[pos]) /10;
		
		result[pos] = one;
		
		if (two != 0)
			saveValue(result, pos + 1, two);
	}
}

 

分享到:
评论

相关推荐

    java 中大软件工厂项目前培训资料

    这份“Java中大软件工厂项目前培训资料”显然包含了这样的教育资源,旨在提升开发者的技能和效率。 在Java的学习中,以下是一些核心知识点: 1. **基础语法**:这是Java入门的基础,包括变量、数据类型、运算符、...

    ACM中大数相乘的问题源代码

    大数相乘的代码,也是才写好的,通过了测试系统,写的不好的,请多多包涵

    利用Java程序实现Oracle数据库中大对象的存取.pdf

    "利用Java程序实现Oracle数据库中大对象的存取" 本文主要介绍了利用Java程序实现Oracle数据库中大对象的存取。Oracle数据库系统是应用最广泛的数据平台,使用Java和Oracle相结合开发网络应用程序,可以使应用程序...

    Java中大集合

    首先,HashMap类是Java中最常用的Map实现之一,它基于哈希表,提供了O(1)的平均时间复杂度来执行插入、删除和查找操作。HashMap不保证元素的顺序,尤其是当迭代器遍历HashMap时,其顺序可能与元素插入的顺序不同。...

    2021计网期中大作业:用UDP实现可靠传输

    本项目旨在通过编程实现一个基于UDP的可靠传输机制,以满足中山大学2021年计网期中大作业的要求。 在这个项目中,学生将需要深入理解UDP的工作原理,以及如何通过自定义机制来弥补其不可靠性。这涉及到以下几个关键...

    JAVA大数据分页算法

    下面将详细探讨Java中大数据分页算法的相关知识点。 首先,我们需要理解分页的基本概念。分页是将大型数据集分割成小块,每一块称为一页,用户可以逐页浏览,而不是一次性看到全部数据。在Web应用中,这通常体现在...

    大整数乘法算法作业实现

    对算法分析与设计课程中大整数乘法的实现,并实现不同位数的大整数相乘

    新中大银色快车SE

    SE简易版则为小型企业和个体经营者提供了更经济、简化版的选择,虽不支持所有辅助核算,但通过科目设置仍能满足基本核算需求,并可逐步升级到更高级别版本。 总的来说,新中大银色快车SE以其强大的功能、高性价比和...

    KNN算法实验报告【Java实现】.doc

    KNN算法实验报告【Java实现】 KNN算法是机器学习领域中一种常用的分类算法,它的主要思想是如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。...

    昆仑中大 多通道数字智能仪表.rar

    《昆仑中大 多通道数字智能仪表》 在现代工业自动化领域,数字智能仪表的应用日益广泛,其中昆仑中大的多通道数字智能仪表以其卓越的性能和灵活的配置,深受业界好评。这款产品集成了先进的传感器技术、微处理器...

    Java对db2中大对象的操作

    在Java编程环境中,DB2数据库的大对象(LOB)操作是一个重要的主题,特别是对于那些处理大量非结构化数据,如图片、视频或者大型文本文件的开发者。大对象包括BLOB(Binary Large Object)和CLOB(Character Large ...

    中大实践考核JAVA语言程序设计试题和答案.pdf

    在中大实践考核JAVA语言程序设计试题中,我们可以看到几个关键知识点: 1. **继承与封装**: - 在样题1中,创建了一个名为`People`的基类,它包含两个保护成员变量`name`(String类型)和`age`(整型),并有一个...

    新中大se破解注册机

    新中大7x-8x注册机注册机注册机注册机注册机注册机注册机

    解决Java中由于数据太大自动转换成科学计数法的问题

    在Java中,当我们处理大数据时,例如Long类型或Double类型的数字,可能会自动转换成科学计数法的形式,例如1.23456789E10。这种自动转换可能会导致数据的精度丢失或难以阅读。因此,我们需要一种方法来避免这种自动...

    中大商品交易系统

    "中大商品交易系统"是一款专门针对商品交易,特别是中大原油交易的软件平台。它为用户提供了便捷、高效的商品订购服务,使交易者能够快速响应市场动态,进行原油等商品的买卖操作。中大原油交易系统是这个平台的核心...

    数据结构课程设计--大数相乘.doc

    在乘法运算过程中,从一个栈中取出一位数字a,与另一个栈中的数字b相乘,并考虑进位d。将结果的个位压入栈S,十位暂存为d。接着继续从第二个栈中取出下一个数字,与a相乘,将得到的个位数再次压入栈S,如此反复,...

    JAVA导出数据到excel中大数据量的解决方法

    web项目中需要有将数据导出excel的操作需求 使用html格式导出方法,但在导出时,根据... 数据从数据库取出使用纯jdbc方式读数据,边读边向文件中写; 待所有数据写完,将各个小excel文件进行打包,输出到输出流中。 ...

    新中大SE客户端-银色快车

    新中大SE客户端 银色快车 简约型ERP软件

    新中大报表公式指导

    编辑功能全面,包括插入、删除行/列、单元格组合、计算分析、打印预览等,用户可通过鼠标直接调整单元格尺寸,实现精准布局。 #### 四、报表数据录入与公式应用 报表数据录入行位于主窗口顶部,支持内容与公式输入...

    中大研究生课件

    了解Java的基本语法结构,如变量声明、数据类型、运算符、流程控制语句(if、switch、for、while等),以及如何编写简单的Java程序。 接下来,课件可能会深入讲解面向对象编程(OOP)的概念。这是Java的核心特性,...

Global site tag (gtag.js) - Google Analytics