要自己实现一个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]);
}
}
}