【JAVA算法】大数相乘

写在前面:

    我也是一名java语言的爱好者,仅以此文作为学习的记录,对于文中出现的代码规范,代码格式,算法效率等问题,希望各路大神不吝赐教,在下感激不尽。同是学习的同学也同样希望互相交流,取长补短。

                                                                                                                                                      ——zsferrier@126.com

java基本类型中long的大小为64bit,能表示的最大整数为2的63次方-1。如果涉及到乘法运算数字超过这个值,显然就不能用长整形来表示,那么再不使用BigInteger的情况下,如何进行大数字的运算呢?

提供一种解决方式:利用数组模拟手工运算乘法的过程。

import java.util.Scanner;

public class Main {

	/**
	 * @param args
	 */
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner = new Scanner(System.in);
		//用字符串接受大数
		String a = scanner.next();
		String b = scanner.next();
		//生成结果数组anwArray,数组的大小为输入两个字符串的长度之和
		int[] anwArray = new int[a.length()+b.length()];
		//两个for是模拟乘法运算
		for(int i=0;i<a.length();i++){
			for(int j=0;j<b.length();j++){
				//p是产生的进位
				int p = (a.charAt(a.length()-1-i)-'0')*(b.charAt(b.length()-1-j)-'0')/10;
				//t是剩下的本位
				int t = (a.charAt(a.length()-1-i)-'0')*(b.charAt(b.length()-1-j)-'0')%10;
				//进位根据乘法运算法则加到对应位置
				anwArray[a.length()+b.length()-2-i-j]+=p;
				anwArray[a.length()+b.length()-1-i-j]+=t;
			}
		}
		//调整结果,因为之前的运算所得到的结果数组中可能存在一位上是个多位数,接下来要把这些位该进位的进位。
		for(int i=0;i<a.length()+b.length()-1;i++){
			int p= anwArray[a.length()+b.length()-1-i]/10;
			int t= anwArray[a.length()+b.length()-1-i]%10;
			anwArray[a.length()+b.length()-i-2]+=p;
			anwArray[a.length()+b.length()-i-1]=t;			
		}
		//输出数组,要去除首部的0
		
		int mx = 0;//设置标志位,直到遇到第一个非零数,将标志位置1,开始输出结果
		for (int i = 0; i < anwArray.length; i++) {
			if(anwArray[i]!=0){
				System.out.print(anwArray[i]);
				mx=1;
			}else {
				if(mx==1){
					System.out.print(anwArray[i]);
				}
			}

		}
	}
}

与计算器的结果比对


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值