java 大数相乘(数组方法实现)

栗子: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]);
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

memory_cood

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值