Java-大数相乘

要自己实现一个RSA算法,其中加密设计到了大数相乘(还有相除,要好好想想)

刚好自己手动实现了,发个博客记录下

大数相乘的原理就是我们在草稿纸上推算乘法的过程,只是变成代码实现

如图(字有点尴尬):



package large_number_multiply;

public class LargeNumberMultiply {
	//private LargeNumberMultiply lar = new LargeNumberMultiply();
	//将Sting转化为数组
	//输入String 输出 int[]
	//这个函数还有缺陷,暂时只能讲123456这样的String转化为int
	public int[] stringToArray(String str) {
		int a[] = new int[str.length()];
		for(int i = 0;i<str.length();i++) {
			a[i]=str.charAt(i)-'0';
		}
		return a;
	}
	
	public int[] multiply(String str1,String str2) {
		//将两个参数转化为数组a和b
		int a[] = stringToArray(str1);
		int b[] = stringToArray(str2);
		//生成输出数组c 长度为a与b的长度和
		int c[]=new int[a.length+b.length];
		
		//诸位相乘,其中b使下面的那个(每一位与a所有位相乘),a是上面的那个
		for(int i = b.length-1;i>=0;i--) {
			for(int j = a.length-1;j>=0;j--) {
				c[i+j+1] = c[i+j+1]+a[j]*b[i];
			}
		}
		//进位,上面的进位没有进位
		for(int i = c.length-1;i>0;i--) {
			c[i-1]=c[i-1]+c[i]/10;
			c[i]=c[i]%10;
		}
		return c;
	}
	
	public static void main(String[] args) {
		LargeNumberMultiply largeNumberMultiply = new LargeNumberMultiply();
		String str = "45";
		String str2 = "45";
		int[] a = largeNumberMultiply.multiply(str, str2);
		for(int i = 0; i<a.length;i++) {
			System.out.print(a[i]);
		}	
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值