- 浏览: 107819 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (99)
- 经济 (1)
- dwr (2)
- 测试 (0)
- java (29)
- resin (1)
- oracle (3)
- 感悟 (1)
- jvm (15)
- mina2 (5)
- j2se (12)
- linux (28)
- protobuf (1)
- tcp/ip (0)
- jdbc (0)
- 数据库 (4)
- 游戏 (0)
- 技术文档 (1)
- nosql (2)
- 算法 (2)
- apache (2)
- mysql (1)
- hashcode (1)
- spring (2)
- quartz (5)
- netcat (2)
- 分页 (1)
- 正则 (0)
- shell (1)
- lsof (1)
- nginx (1)
- git (1)
最新评论
-
fys124974704:
你试下将第三条写成以下这样,你会发现你的结论不对:select ...
ORACLE分页SQL语句 -
ikon:
两个乘数没有转成integer,而是当成字符串;BigInte ...
计算任意2个正整数的乘积 -
kidding87:
效率不是很高,思路没有问题,但是你的两个乘数输入都都转为Int ...
计算任意2个正整数的乘积 -
k1280000:
------------------------同意!
学习之道
接上一篇整数的阶乘算法,来计算2个正整数的乘积;
算法如下:
- 用被乘数的右边第一位去乘乘数,每位的结果放入集合;然后从低位到高位进行满十进位;
- 用被乘数的右边第二位去乘乘数,每位的结果向左错一位放入集合;然后从低位到高位进行满十进位;
- 以此类推。。。。
具体代码如下:
package com.datastruct.array; import java.util.ArrayList; import java.util.List; /** * 计算任意2个正整数相乘 * @author ikon * */ public class Multi { public static void main(String[] args){ ConsoleReader console = new ConsoleReader(System.in); System.out.print("请输入乘数 : "); String num1 = console.readLine(); System.out.print("请输入被乘数 : "); String num2 = console.readLine(); List<Integer> datas = new ArrayList<Integer>(); int digit = num2.length(); for(int i=0;i<digit;i++){ int num2i = Integer.parseInt(num2.substring(digit-1-i, digit-i)); for(int j=0;j<num1.length();j++){ int num1i = Integer.parseInt(num1.substring(num1.length()-1-j, num1.length()-j)); if(datas.size()==(j+i)){ datas.add(0); } datas.set(i+j, datas.get(i+j)+num1i*num2i); } for(int j=0;j<datas.size();j++){ if(datas.get(j)>9){ if(datas.size()==j+1){ datas.add(j+1,0); //这里要注意进位,调用add } datas.set(j+1, datas.get(j+1)+datas.get(j)/10); datas.set(j, datas.get(j)%10); } } } System.out.print(num1+"*"+num2+"="); for(int index=datas.size()-1;index>-1;index--){ System.out.print(datas.get(index)); } } }
BigInteger补充:
package com.datastruct.array; import java.math.BigInteger; import java.util.ArrayList; import java.util.List; /** * 计算任意2个正整数相乘 * BigInteger版 * @author ikon * */ public class MultiBigInteger { public static void main(String[] args){ ConsoleReader console = new ConsoleReader(System.in); System.out.print("请输入乘数 : "); String num1 = console.readLine(); System.out.print("请输入被乘数 : "); String num2 = console.readLine(); BigInteger a = new BigInteger(num1); BigInteger b = new BigInteger(num2); System.out.print(num1+"*"+num2+"="+a.multiply(b)); } }
评论
2 楼
ikon
2011-11-13
两个乘数没有转成integer,而是当成字符串;BigInteger确实封装了,我修改下;
1 楼
kidding87
2011-11-12
效率不是很高,思路没有问题,但是你的两个乘数输入都都转为Integer么,Integer的范围不够吧
java里面已经有对这个的算法的封装了,看看BigInteger的方法吧
java里面已经有对这个的算法的封装了,看看BigInteger的方法吧
发表评论
-
Quartz定时任务学习(一)简单任务
2012-04-27 12:30 893学习quartz首先了解三个概念: 调度器:负责调度作 ... -
介绍Quartz
2012-04-27 12:22 1453介绍Quartz Quartz是一个开源的任务调度 ... -
理解Quartz触发器(1)
2012-04-27 11:37 910Quartz中一个Job往往是 ... -
Quartz中SimpleTrigger的探讨
2012-04-27 11:34 7471.来写一个每隔10秒启动一次任务的例子. import j ... -
理解Java对象序列化
2012-02-15 09:38 733关于Java序列化的文章早 ... -
认识Arrays(一)打印
2012-02-03 16:52 616Arrays提供了一组操作array的静态方法。 一、基本类 ... -
oracle java数据类型对应表
2011-12-05 13:37 0[img]http://dl.iteye.com/upload ... -
计算任意正整数的阶乘
2011-11-12 20:17 696由于阶乘的结果会超出java数据类型的最大范围,所 ... -
Java调用外部程序技巧
2011-11-08 09:17 839前些天使用Java调用外部程序的时候,发现线程会堵塞在wa ... -
多核平台下的JAVA优化
2011-11-08 09:12 676现在多核CPU是主流。利用多核技术,可以有效发挥硬件的能力 ... -
使用 Eclipse Memory Analyzer 进行堆转储文件分析
2011-11-07 17:09 820http://www.ibm.com/developerwor ... -
infoQ 文档ppt
2011-11-07 11:43 1312http://www.docin.com/app/user/c ... -
游戏性能监控
2011-11-07 10:18 01、cpu消耗(耗时)监控 在功能代码前后取时间值,相减,发 ... -
使用Cacti监控你的网络(一)- Cacti概述及工作流程
2011-11-07 09:36 752http://blog.sina.com.cn/s/b ... -
浅析 Java Thread.join()
2011-10-29 09:25 910一、在研究join的用法之前,先明确两件事情。 1.join ... -
hashmap线程不安全在哪里?
2011-10-13 11:33 1117大家都知道HashMap不是线程安全的,但是大家的理解 ... -
java面试题及答案(基础题122道,代码题19道)
2011-10-10 22:54 713http://ilovelate.itpub.net/post ... -
关于UnsupportedOperationException异常
2011-09-29 12:03 611我们在使用collection框 ... -
关注一下druid
2011-09-26 09:21 756关注一下druid,阿里开源的jdbc组件,可以监控数据库访问 ... -
字节流调试
2011-09-22 17:01 789针对后台的字节流数据调试比较麻烦,通常的做法是将刚从socke ...
相关推荐
# 给你一个正整数列表 L, 判断列表内所有数字乘积的最后一个非零数字的奇偶性。如果为奇数输出1,偶数则输出0。 # 输入示例 # 输入:L=[2,8,3,50] # 输出示例 # 输出:0 # 解析 # 在上题的基础上的改造题, 这里直接...
这时可以扩展算法,先计算任意两个数的最小公倍数,然后依次与其他数求最小公倍数,直至处理完所有数。这种方法称为“逐步扩展法”。 总之,计算两个正整数的最小公倍数是基础数学和计算机科学中的常见问题。理解并...
在数学运算中,阶乘是一个非常重要的概念,它是指一个正整数的连续乘积。例如,5的阶乘是5*4*3*2*1=120。在Java语言中,我们可以使用不同的循环结构来实现正整数的阶乘,下面我们将介绍两种常见的方法。 方法一:...
因此,为了能够计算任意大小的正整数的阶乘,我们需要设计一种特殊的算法。 #### 二、算法设计思路 本文介绍了一种用于计算任意大小的正整数阶乘的算法。该算法主要通过使用整型数组来存储大数,并通过一系列辅助...
在编程领域,阶乘是一个常见的数学概念,通常用于计算组合数和概率问题。...综上所述,无论选择循环还是递归,Java都能有效地计算任意正整数的阶乘。理解这两种方法的原理和应用场景,对提升编程能力大有裨益。
欧几里得原理的核心思想是:对于任意两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数和b之间的最大公约数。我们可以利用这个原理,通过迭代的方式找到满足方程的整数解。 为了实现这个算法,我们首先需要...
### 十进制数相乘并显示乘积 本文将详细介绍如何通过汇编语言实现一个多位十进制数与一个单个十进制数相乘,并将结果以十进制形式显示在屏幕上的过程。本示例代码适用于早期的DOS环境。 #### 1. 代码结构与初始化 ...
通过这个简单的C程序,我们可以高效地计算任意两个正整数的最大公约数和最小公倍数。在实际应用中,这种基本的算法知识是程序员必备的技能,它不仅有助于理解更复杂的算法,而且在处理数据和优化程序时也十分有用。
综上所述,通过结合C#的循环、数学运算、用户交互和数值序列处理,我们可以构建出一个能够根据用户输入的正整数n,计算并输出1!+2!+…+n!之和的控制台应用程序。这个程序不仅可以帮助初学者熟悉基本的编程概念,也...
在编程领域,分解质因子是计算科学中的一个重要概念,它涉及到将一个正整数表示为若干个质数的乘积。在C#中实现这个功能,可以帮助我们理解数字的结构,尤其是在加密算法、数论或者数学问题求解等方面。下面我们将...
在计算机科学中,计算两个正整数的最大公约数(Greatest Common Divisor, GCD)和最小公倍数(Least Common Multiple, LCM)是一项基本任务,尤其在数学和算法领域有着广泛的应用。这里我们将详细探讨如何使用不同的...
对于任意两个正整数a和b,它们的最小公倍数LCM(a, b)是能够同时被a和b整除的最小正整数。 为了求解1至20的所有整数的最小公倍数,我们可以考虑以下步骤: 1. **分解质因数**:首先将1至20中的每个数字分解为质因数...
本文将详细探讨如何使用编程方法计算两个正整数的最大公约数(Greatest Common Divisor, GCD)和最小公倍数(Least Common Multiple, LCM)。首先,我们来看如何用辗转相除法求最大公约数。 辗转相除法,也称为...
在编程领域,计算两个正整数的最大公约数(Greatest Common Divisor, GCD)和最小公倍数(Least Common Multiple, LCM)是基础且重要的算法问题。这两个概念广泛应用于数学、计算机科学以及工程计算中。以下是针对...
System.out.print("请输入第二个正整数:"); int b = scanner.nextInt(); int gcdResult = gcd(a, b); int lcmResult = Math.abs(a * b) / gcdResult; System.out.println("最大公约数:" + gcdResult); ...
这个压缩包中的"大数乘法.CPP"文件显然是一个实现大数乘法的C++程序,它使用了字符数组来存储大整数,并通过高效算法实现了快速的乘法运算。 大数通常用数组表示,每个数组元素存储一个位。在本例中,可能是用字符...
其基本思想是:对于任意两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c与b之间的最大公约数。可以表示为GCD(a, b) = GCD(b, a % b)。当余数为0时,b即为最大公约数。以下是辗转相除法的流程图描述: - ...
阶乘表示的是一个正整数n的所有小于等于n的正整数的乘积,通常用“!”来表示。例如,5的阶乘(5!)就是5 * 4 * 3 * 2 * 1,等于120。本问题要求我们编写一个程序,能够接受任意输入的正整数n,并计算其阶乘。 实现...
一个常见的方法是欧几里得算法(Euclidean Algorithm),其基本思想是:对于任意两个正整数a和b(a>b),它们的最大公约数等于b和a除以b的余数的最大公约数。用C++实现这个算法如下: ```cpp int gcd(int a, int b)...
本项目实现了大整数相乘的功能,能够处理理论上任意长度的正整数。下面将详细介绍这个C++实现的原理和关键知识点。 1. **大整数表示**:由于标准的`int`和`long long`等数据类型无法存储超大的整数,我们通常使用...