两个大数相乘-Java
两个字符串表示两个非常大的数,请设计算法计算这两个大数的乘积,结果用字符串表示。例如S1=”7832974972840919321747983209327”,S2=”1987432091904327543957”,设计算法计算出S1*S2的结果,结果用String输出,不准用BigInter。
思路: 
根据手工计算两数相乘的过程,用代码实现这个过程。
代码:
import java.util.Scanner;
public class DaZhengShuChengJi {
        public static void main(String[] args) {
            System.out.println(multiply(num1, num2));
        }
        public static String multiply(String num1, String num2) {
            int l = num1.length();
            int r = num2.length();
            //用来存储结果的数组,可以肯定的是两数相乘的结果的长度,肯定不会大于两个数各自长度的和。
            int[] num = new int[l+r];
            //第一个数按位循环
            for(int i=0;i<l;i++) {
                //得到最低位的数字
                int n1=num1.charAt(l-1-i)-'0';
                //保存进位
                int tmp=0;
                //第二个数按位循环
                for(int j=0;j<r;j++) {
                    int n2=num2.charAt(r-1-j)-'0';
                    //拿出此时的结果数组里存的数+现在计算的结果数+上一个进位数
                    tmp=tmp+num[i+j]+n1*n2;
                    //得到此时结果位的值
                    num[i+j]=tmp%10;
                    //此时的进位
                    tmp/=10;
                }
                //第一轮结束后,如果有进位,将其放入到更高位
                num[i+r]=tmp;
            }
            int i=l+r-1;
            //计算最终结果值到底是几位数,
            while(i>0&&num[i]==0){
                i--;
            }
            StringBuilder result="";
            //将数组结果反过来放,符合正常读的顺序,
           //数组保存的是:1 2 3 4 5
           //但其表达的是54321,五万四千三百二十一。
            while(i>=0) {
                result += num[i--];
            }
           return result;
        }
}
两个大数相乘-Java的更多相关文章
- 华为上机测试题(大数相乘-java)
		PS:这个不是自己写的,测试OK,供参考. /** * 大数相乘 */ public class BigData { public static void main(String[] args) { ... 
- 用字符串模拟两个大数相加——java实现
		问题: 大数相加不能直接使用基本的int类型,因为int可以表示的整数有限,不能满足大数的要求.可以使用字符串来表示大数,模拟大数相加的过程. 思路: 1.反转两个字符串,便于从低位到高位相加和最高位 ... 
- Multiply Strings 大数相乘 java
		先贴上代码 public String multiply(String num1, String num2) { String str = ""; StringBuffer sb ... 
- 大数相乘 java
		<pre name="code" class="java">package bigMultiply; import java.math.BigInt ... 
- 两个大数相乘 - 高精度FFT
		HDU 1402 A * B Problem Plus Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (J ... 
- Go--实现两个大数相乘
		----- import ( "bufio" "fmt" "os" "strings" ) func multi(str ... 
- Karatsuba乘法--实现大数相乘
		Karatsuba乘法 Karatsuba乘法是一种快速乘法.此算法在1960年由Anatolii Alexeevitch Karatsuba 提出,并于1962年得以发表.此算法主要用于两个大数相乘 ... 
- 1051:A × B problem  大数相乘
		给你两个整数,请你计算A × B. 输入 数据的第一行是整数T(1 ≤ T ≤ 20),代表测试数据的组数.接着有T组数据,每组数据只有一行,包括两个非负整数A和B.但A和B非常大,Redraimen ... 
- java版大数相乘
		在搞ACM的时候遇到大数相乘的问题,在网上找了一下,看到了一个c++版本的 http://blog.csdn.net/jianzhibeihang/article/details/4948267 用j ... 
随机推荐
- MSDTC启用——分布式事务
			一.前言 最近在做一个项目的时候使用了.NET中的System.Transactions(分布式事务),当项目开发完成以后,调用的时候遇到了MSDTC的问题,在查阅了相关资料后将这个问题解决了,大致的 ... 
- HTMl课堂随笔
			html: 1.超文本标记语言(Hyper Text Markup Lan) 2.不是一种编程语言,而是一种标记语言(Markup Language) 3.标记语言是一套标记标签(Markup Tag ... 
- vim  配置插件
			vim插件可以用bundle管理,我这里面用的是一个开源的Vundle工具,git上操作步骤说的很清楚https://github.com/VundleVim/Vundle.vim 之前PluginI ... 
- PHP面向对象中 static:: 与 self::  parent:: $this->  的区别
			很多好几年工作经验的PHP工程师,对PHP面向对象中 static:: .self::.parent::.$this-> 的定义和使用都不清晰,特做详细梳理: static:: 可以访问全局作 ... 
- Android学习笔记-ImageView(图像视图)
			本节引言: 本节介绍的UI基础控件是:ImageView(图像视图),见名知意,就是用来显示图像的一个View或者说控件! 官方API:ImageView;本节讲解的内容如下: ImageView的s ... 
- Ztree _ 横向显示子节点、点击文字勾选、去除指定元素input的勾选状态
			前些天项目需要树结构表现数据,需求ztree就能满足所以直接使用ztree只是踩了些小坑... 1.ztree子节点横向显示(下图): 效果说明:第三级子节点按需求横向显示其他竖向显示,每行最多显示5 ... 
- [转]为什么大型网站前端使用 PHP 后台逻辑用 Java?
			最近纠结了一下,如果开发一个大型的网站,我到底应该使用php还是jsp,后台到底使用php还是用java,我的选择要么是php要么是java,因为我喜欢linux.unix,当然window平台也必须 ... 
- javascript基础知识3#引用类
			引用类 引用类型的只是引用类型的一个实例,在ecmascript当中,引用类型是一种数据结构用于将数据和功能组织在一起,也常被称做类. object类型 构造函数[var o = new object ... 
- SpringMVC+MyBatis 事务管理二
			前言 上篇主要从编程式事务和声明式事务注解的形式来了解了事务,而这篇我们针对AOP的方式来实现事务.先回顾下事务的基础知识事务的隔离级别和事务的传播行为.使用aop 配置事务时注意引用aspectjw ... 
- 从.net到java,记录下这三个月的工作
			从事.NET开发已经4个年头,经过十余个项目的学习与沉淀,终于有了一套自己熟悉并且相对完善的技术体系,面对未知,不再惧怕.期间完成并广泛用于公司项目的作品包括: abp的二次开发框架BodeAbp 基 ... 
