`
拓子轩
  • 浏览: 211920 次
  • 性别: 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是基于广泛认可的NGPower...

    大整数乘法算法作业实现

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

    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`(整型),并有一个...

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

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

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

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

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

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

    新中大报表公式指导

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

    中大研究生课件

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

    中大商品交易系统

    在当今快速变化的市场环境下,商品交易尤其是原油市场的参与者们迫切需要一款高效便捷的交易平台,以准确捕捉...通过不断地学习和实践,交易者可以更好地利用这个系统,实现自己的交易目标,并在商品市场中取得成功。

    中大计算机课程实践考核(二)JAVA语言上机考试答案

    - **Java Applet**:样题2的第二部分展示了如何创建一个简单的Applet,即嵌入到网页中的Java小程序。`Applet`类是基础,需要继承并重写`paint`方法来绘制图形。`Applet`需要在浏览器或Appletviewer中运行。 3. **...

    新中大SE 数据字典

    它不仅详细记录了各个业务模块的数据库表结构,还提供了重要的字段含义说明和特殊注意事项,为开发者提供了宝贵的参考资料,有助于快速理解和掌握系统的数据逻辑和技术实现细节。对于维护和升级现有系统、开发新的...

Global site tag (gtag.js) - Google Analytics