最近去面试,面试官问了几个不痛不痒的问题后,突然问我大数的相乘如何实现。我知道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程序实现Oracle数据库中大对象的存取.pdf
2021中山大学计网期中大作业:用UDP实现可靠传输
Java集合 HashMap类 IdentityHashMap类的使用 SortedMap类的基本使用 在map中创建自己的类的定义 随机数的集合 等等等等
对算法分析与设计课程中大整数乘法的实现,并实现不同位数的大整数相乘
新中大 se 结构表 有点老的 全称:SE表结构说明与注意事项新中大银色快车SE9 0培训辅导教程
昆仑中大 多通道数字智能仪表rar,昆仑中大 多通道数字智能仪表
新中大破解演示!有A3 W3 gsoft i6p系列!qq:961928812
新中大7x-8x注册机注册机注册机注册机注册机注册机注册机
新中大医生,正常好用,正版,亲测有用。自己也用,有需要的可以下载使用。才门用于新中大软件修复用的,修复新中大安装环境
新中大SE客户端 银色快车 简约型ERP软件
中大实践考核JAVA语言程序设计试题和答案.pdf
用于连接新中大服务器的客户端安装组件,请根据局域网内新中大的地址安装
中大商品交易系统,中大原油交易系统,中大原油订购交易软件 详情可以百度中大原油官网咨询
一个简单的数据库操作程序,适合初学者学习,知识绝对不高深
中大计算机本科课程实践考核(二)java语言上机考试答案,2008年修订版。
简单地说,核算单位模块是用于建账,财务处理系统用于登账,报表处理系统用于出报表的,。 一、 日常账务 日常账务主要有:凭证录入、凭证审核、记账、月结等。 1、记账凭证录入 日常账务→凭证处理→记账凭证...
一年全国计算机等级考试二级JAVA上机模拟试卷四中大网校.pdf
本文介绍了Linux操作系统中大页的实现。分别从memory层、文件系统层、libhugetlbfs,以及用户如何使用大页等这几个方面进行了分析和介绍。让您更好的了解大页在内核的实现机制以及用户使用方法。大页主要是为了用户...