栗子:987654321 乘以 11
public class Main
{
public static void main(String[] args)
{
int[] sum = new int[50];
sum[sum.length-1] = 1; // 默认最后一个为 1
int n = 100; // 100 的阶乘
for(int i=1;i<=100;i++)
{
sum = getBigNumber(sum,i); // 调用大数相乘的方法
}
for(int i=0;i<sum.length;i++)
{
System.out.print(sum[i]);
}
}
public static int[] getBigNumber(int[] sum,int i)
{
for(int i=sum.length-1;i>=0;i--) // 大数的每一位先乘以i ,不考虑进位,直接先存到
{ // sum[i]里面
sum[i]*=i;
}
for(int i=sum.length-1;i>0;i--) // 处理进位,先取进位,再取个位
{
sum[i-1] += sum[i]/10; // 除以10,得进位
sum[i] = sum[i]%10; // 取余10 得个位
}
return sum;
}
}
进阶版:两个大数相乘
思想是一样的,只是现在要用两个数组来存储两个大数
/**
* @Author memory_coder
* @Date 2019/4/29 9:58
* @Version 1.0
*/
public class TwoBigNumber {
public static void main(String[] args) {
// 两个大数
int[] bigNums1 = {3,2,1,4,5,6,7,8,9};
int[] bigNums2 = {9,8,7,6,5,4,3,2,1};
// 存放结果
int[] sum = new int[100];
int len = sum.length;
// 这里和数学乘法一样的,bigNums1乘以bigNums2的每一位,存到sum中,先不考虑进位
for (int i = bigNums1.length - 1; i >= 0; i--) {
len--; //数1 乘以 数2个位,最后一位从个位开始,数1 乘以 数2的十位,就得从十位开始
for (int j = len, z = bigNums2.length - 1; z >= 0; z--, j--) {
sum[j] += bigNums2[z] * bigNums1[i];
}
}
// 处理进位
for (int i = sum.length - 1; i > 0; i--) {
sum[i - 1] += sum[i] / 10; // 先取进位加到下一位
sum[i] = sum[i] % 10; // 取余得到个位
}
// 输出
for(int i=0;i<sum.length;i++)
{
System.out.print(sum[i]);
}
}
}