大数字相乘


/**
 * 大数字相乘
 */
public class Test1 {
    /**
     * ints * num
     * @param ints
     * @param num
     * @return
     */
    public static int[] mul(int[] ints,int num){
        for (int i = 0; i < ints.length; i++) {
            ints[i] *= num;
        }
        for (int i = ints.length-1; i > 0; i--) {
            ints[i-1] += ints[i]/10;
            ints[i] = ints[i]%10;
        }
        return ints;
    }

    private static void console(int[] ints){
        boolean flag = true;
        for (int i = 0; i < ints.length; i++) {
            if (flag){
                if (ints[i]!=0){
                    System.out.print(ints[i]);
                    flag = false;
                }
            }else {
                System.out.print(ints[i]);
            }
        }
        System.out.println();
    }
    /**
     * num的阶乘
     * @param num
     */
    public static int[] factorial(int num){
        int[] ints = new int[200];
        ints[ints.length-1] = 1;
        for (int i = 1; i <= num; i++) {
            ints = mul(ints,i);
        }
        return ints;
    }
    public static void main(String[] args) {
        int[] i = {1,1,0};
        int num = 11;
        // 110 * 11
        console(mul(i, num));
       // console(factorial(50));//30414093201713378043612608166064768844377641568960512000000000000
    }
}

原文地址:https://www.cnblogs.com/fly-book/p/11623995.html

时间: 2024-11-06 03:35:55

大数字相乘的相关文章

求两个大整数相乘的积,数字长度在127个字符之内。

计算两个大整数相乘的结果,数字不是double类型能表示的,数字长度没有限制(最大127位). 方法一:使用java中的大整数处理库函数,java.math.BigInteger,java.math.BigDecimal; 方法二:不利用库函数,自己实现其功能,可以练习自己对待复杂问题的处理能力,提高编程水平. 此代码中利于两者的结合,利于库函数可以看自己编写的代码的正确性. 1.主函数 import java.math.BigDecimal; import java.util.Scanner;

java大数字操作:BigInteger,BigDecimal(浮点型)

java大数字操作: BigInteger:大数字整型的 BigDecimal(浮点型):大数字小数的,也适用大的整数 BigInteger: String num1 = "100381828646148164"; String num2 = "10998979766868"; BigInteger big1 = new BigInteger(num1); BigInteger big2 =new BigInteger(num2); System.out.print

用阿拉伯乘法解决大整数相乘问题

问题 大整数相乘 思路说明 对于大整数计算,一般都要用某种方法转化,否则会溢出.但是python无此担忧了. Python支持"无限精度"的整数,一般情况下不用考虑整数溢出的问题,而且Python Int类型与任意精度的Long整数类可以无缝转换,超过Int 范围的情况都将转换成Long类型. 例如: >>> 2899887676637907866*1788778992788348277389943 5187258157415700236034169791337062

python实现大整数相乘---格子乘法

以前做ACM的时候,许多人都通过 BigInteger 来实现大数乘法,让我记忆犹新的事2012年的辽宁省赛在大连大学,第一道水题就是大整数乘法,那时还不会java. 大数乘法的实现是基于印度的格子乘法,使用这种方法,计算 m 位数乘以 n 位数只需要创建一个 m+n 位的数组保存结果即可. 今天我们来用python来模拟一下格子算法的运算过程,python来写算法还是很简单的. 下面是从维基百科上爬下来的图片和详细步骤. 第一步:画带斜线的格子,将第一数(58)写在格子顶部,第二数(213)书

POJ2389: 大数字乘法算法

2014-12-26 大数字乘法算法一般是采用模拟"小学生乘法演算过程”方法. 主要算法思想: 1. 乘数a第i)位与乘数b第j)位数字相乘,并将该乘积结果放到乘积结果数组product的第(i+j-1)位中: 2. 检查product的第(i+j-1)位中储存的数字是否超过或等于10,若是,则“取余并且进位”. 细节参考代码: 1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 void s

js中Number数字相乘后值不对

问题: 37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数) 我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.08499999999998 怎么会这样,两个只有一位小数的数字相乘,怎么可能多出这么小数点出来. 我Google了一下,发现原来这是JavaScript浮点运算的一个bug. 比如:7*0.8 JavaScript算出来就是:5.6000000000000005解决方法:网上找到了一些解决办法,就是重新写了一些浮点运算的函数. 下面就把这些

JsonCpp读取较大数字出错问题

JsonCpp是c++中解析Json常用的解析库.在项目开发中,服务端如果用的是java的话都会是以JSON格式进行传输,客户端使用c++的话都会用到JsonCpp.看看下面这个问题:  json字串:{"@type":"Login","messageType":"Login","sendTime":1403575350411,"receivedTime":0,"loginId

hadoop 大矩阵相乘

package org.bigdata.util; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Scanner; import org.apache.hadoop.conf.Configuration; import org.apac

大数字操作、BigInteger的使用 BigDecimal(很大的小数)

1 public class Test4 { 2 public static void main(String[] args) { 3 BigInteger num1=new BigInteger("123456789123456789123456789"); 4 BigInteger num2=new BigInteger("2345678901234567890"); 5 System.out.println("加:"+(num1.add(n