hdu1042 java_Java实现大数乘法运算

基本思路:将输入的两个大数以字符串的形式存储,然后转化成整型数组存储,通过整型数组进行乘法运算(采用分治的思想)

即乘法分配律,如AB*CD=AC(AD+BC)BD,将两个数组逐位相乘的结果对位存放在新的数组里,再对新数组进行进位判定,进位结束后将新数组转化成字符串输出。

实现代码如下:

import java.util.Scanner;

//创建类largenumberOperationMultiply

public class largenumberOperationMultiply {

//定义方法multiply的功能

public String multiply(String str1,String str2){

int[] num1 = new int[str1.length()];

int[] num2 = new int[str2.length()];

int[] result = new int[str1.length() + str2.length()];

//将两个字符串转成整型数组,顺序转换,数组下标越小,数字对应的位数越高

for (int i = 0;i < str1.length(); i++){

num1[i] = Integer.parseInt(str1.substring(i,i+1));

}

for (int i = 0;i < str2.length(); i++){

num2[i] = Integer.parseInt(str2.substring(i,i+1));

}

//两大数相乘

for (int a = 0;a < str1.length(); a++){

for (int b = 0;b < str2.length(); b++){

result[a+b] += num1[a]*num2[b];

}

}

判断是否需要进位,满10进1,因为存储顺序与位数高低相反,所以采用逆序进位

int temp;

for (int k = result.length-1; k > 0; k--){

temp=result[k]/10; //数组下标大的向数组下标小的进位

result[k-1] += temp;

result[k] = result[k]%10;

}

//将结果数组逆序转化为字符串

String resultstr = "";

for (int i = 0; i < result.length-1; i++){

resultstr += "" + result[i];

}

return resultstr;

}

public static void main(String[] args){

Scanner sc = new Scanner(System.in);

System.out.println("请输入第一个数:");

String str1 = sc.next();

System.out.println("请输入第二个数:");

String str2 = sc.next();

largenumberOperationMultiply bn = new largenumberOperationMultiply();

//创建类largenumberOperationMultiply的对象bn

String output = bn.multiply(str1,str2);

//bn对象调用multiply方法对str1和str2进行操作

System.out.println(str1+"与"+str2+"的积为="+output);

}

}

HDU 5686 斐波那契数列、Java求大数

原题:http://acm.hdu.edu.cn/showproblem.php?pid=5686 当我们要求f[n]时,可以考虑为前n-1个1的情况有加了一个1. 此时有两种情况:当不适用第n个1进 ...

Java BigInteger&lpar;大数,ACM比赛专用)

用c或者C++处理大数比较麻烦,于是决心学习一下JAVA中大数运算. 先下载一个eclipse,具体的用法去问度娘吧 JAVA中有两个类BigInteger和BigDecimal分别表示大整数类和大浮 ...

Java的大数操作分为BigInteger和BigDecimal

Java的大数操作分为BigInteger和BigDecimal,但这两给类是分开使用的,有时候在编程的时候显得略微繁琐,现在编写了一个将二者合二为一的大数操作类. 大数操作类代码如下: 1 pack ...

JAVA解决大数

主题链接:CLICK HERE~ 有了Java求解大数变得如此简单,以后再也不用操心大数模板了.哦啦啦啦. import java.math.BigInteger; import java.math. ...

用Java进行大数处理(BigInteger)-hdu1042

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1042 题目描述: 代码实现: import java.util.Scanner; import jav ...

Java中大数的使用与Java入门&lpar;NCPC-Intergalactic Bidding&rpar;

引入 前几天参加湖南多校的比赛,其中有这样一道题,需要使用高精度,同时需要排序,如果用c++实现的话,重载运算符很麻烦,于是直接学习了一发怎样用Java写大数,同时也算是学习Java基本常识了 题目 ...

UVA10862 - Connect the Cable Wires(递推 &plus; java的大数)

UVA10862 - Connect the Cable Wires(递推 + java的大数) 题目链接 题目大意:给你n座房子位于一条直线上,然后仅仅给你一个cable service.要求每座房 ...

HDU 4873 ZCC Loves Intersection(JAVA、大数、推公式)

在一个D维空间,只有整点,点的每个维度的值是0~n-1 .现每秒生成D条线段,第i条线段与第i维度的轴平行.问D条线段的相交期望. 生成线段[a1,a2]的方法(假设该线段为第i条,即与第i维度的轴平 ...

java版大数相乘

在搞ACM的时候遇到大数相乘的问题,在网上找了一下,看到了一个c++版本的 http://blog.csdn.net/jianzhibeihang/article/details/4948267 用j ...

随机推荐

Monkeyrunner小脚本关于camera的使用

一下代码涉及自动执行camera,属性一个小设置,恢复初始值,并在中间添加截屏功能 将两个截屏进行前后对比,并返回值 适合初学者,刚刚了解monkeyrunner 的人员来看 注意:一下脚本如果不能执 ...

IPC&colon;Sockets

Please refer to http://www.cs.cf.ac.uk/Dave/C/node28.html.

&lpar;转&rpar;ThinkPHP find方法 查询一条数据记录

find() ThinkPHP find() 方法是和 select() 用法类似的一个方法,不同之处 find() 查询出来的始终只有一条数据,即系统自动加上了 LIMIT 1 限制. 当确认查询的 ...

【创建型】Singleton模式

单例模式可以说是所有23种设计模式中最为简单的一个,没有之一.其主要思想就是保证整个应用环境中,最多只会有一个对象的实例.类关系图参考如下: 在c++中,单例模式的实现,较为常用的实现方式一般为: n ...

Swift中可能失败的构造器的传播&lpar;调用&rpar;和重写

import Foundation /* 可能失败构造器的传播(调用) 1.可能失败的构造器可以调用同一个类中的普通构造器 2.普通构造器不能调用同一个类中的可能失败构造器 3.结构体中, 普通构造器 ...

each与list的用法(PHP学习)

1.each的用法 先看API array each ( array &$array ) api里是这么描述的:each — 返回数组中当前的键/值对并将数组指针向前移动一步 我们先来看看返回 ...

qlineedit控件获得焦点

出处:http://blog.sina.com.cn/s/blog_640531380100wld9.html qlineedit控件获得焦点 lineEdit->setFocus();

itembase协同过滤的详细介绍

◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:https://www.cnblogs.com/by-dream/p/9016289.html 前言 通常我们在网购的时候会遇到这 ...

对datatable添加数据

DataTable dt = new DataTable(); dt.Columns.Clear(); dt.Columns.Add("事故发生时间"); dt.Columns.A ...

Vue和element-ui结合的简单使用

前提 vue在前端技术中使用越来越多,也成为了主流框架,花点时间稍微了解下vue-cli.vue-router结合element-ui的使用.本人使用的是windows系统,后续介绍以windows7 ...

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值