算法题:编程实现大数的乘法

两个数相乘,结果的最大位数为两个数的位数之和
比如有两个相乘9799,
先把它们的每一位依次相乘
个位结果=7
9=63
十位结果为=(99+79)=144
百位结果=81
结果为81 144 63
然后依次进位
个位=63%10=3
十位=(144+63/10) %10=0
百位=(81+150/10)%10=6
千位=96/10=9
然后根据该思想编写算法

package algorithm;

public class Test2 {
	public static void main(String[]args) {
		String a="689";
		String b="3";
		char[]large=null;
		char[]small=null;
		if (a.length()>b.length()) {
			large=a.toCharArray();
			small=b.toCharArray();
		}else {
			large=b.toCharArray();
			small=a.toCharArray();
		}
		System.out.println(a.length()+" "+b.length());
		int[]multi=new int[a.length()+b.length()];
		for(int i=0;i<small.length;i++) {
			for (int j = 0; j<large.length; j++) {
				
				int num1=small[small.length-1-i]-'0';//个位对齐
				int num2=large[large.length-1-j]-'0';
				multi[i+j]+=num1*num2;
				System.out.println(multi[i+j]);
				
			}
		}
		for (int i = 0; i < multi.length; i++) {
			System.out.print(multi[i]+" ");
		}
		for (int i = 0; i < multi.length-1; i++) {
			if (multi[i]>9) {
				multi[i+1]+=multi[i]/10;
				multi[i]%=10;
			}
		}
		System.out.println();
		for (int i = 0; i < multi.length; i++) {
			System.out.print(multi[i]+" ");
		}
		StringBuilder stringBuilder=new StringBuilder();
		for (int i = 0; i < multi.length; i++) {
			stringBuilder.append(multi[multi.length-1-i]);
		}
		System.out.println();
		String result=stringBuilder.toString();
		if (result.startsWith("0")) {
			result=result.substring(1);
		}
		System.out.println(result);
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值