俩个大数相乘(java实现)

Java 大数相乘 将大数相乘分成三步 1:定义 单个数 与 大数相乘 2:定义 两个大数相加 3:将单个数与大数相乘结果 用 定义好的 大数相加函数 加起来 import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; public class Test { public static void main(String[] args){ String num1 = "17543231453" 阅读详情
package com.example;

/**
 *
 * @author ZHANGHAOHAO089
 * @date 2017/6/27
 */

public class BigNumber {

    public static void main(String args[]) {
        String str1 = "121255";
        String str2 = "23545";
        char[] data1 = str1.toCharArray();
        char[] data2 = str2.toCharArray();
        convert(data1);
        convert(data2);
        multiply(data1, data2);
    }

    //高低位对调
    public static void convert(char data[]) {
        int len = data.length;
        for (int i = 0; i < len / 2; i++) {
            char num = data[len - i - 1];
            data[len - i - 1] = data[i];
            data[i] = num;
        }
    }

    public static void multiply(char[] x, char[] y) {
        int lenX = x.length;
        int lenY = y.length;
        int[] sum = new int[lenX + lenY + 3];//最多是这个位数
        //对sum赋值
        for (int i = 0; i < sum.length; i++) {
            sum[i] = 0;
        }
        for (int i = 0; i < lenX; i++) {
            for (int j = 0; j < lenY; j++) {
                sum[i + j] += Integer.parseInt(String.valueOf(x[i])) * Integer.parseInt(String.valueOf(y[j]));
            }
        }
        //高低位进阶
        for (int m = 0; m < sum.length; m++) {
            int number = sum[m] / 10;
            if (number > 0) {
                sum[m] = sum[m] % 10;
                sum[m + 1] += number;
            }
        }

        //打印
        int index = 0;
        for (int n = sum.length - 1; n > 0; n--) {
            if (sum[n] > 0) {
                index = n;
                break;
            }
        }

        for (int m = index; m >= 0; m--) {
            System.out.print(sum[m]);
        }
    }
}

核心就是转化为数组来实现相乘,而且sum[i+j]的数是关键

C++ 实现大数相乘 如果这两个数比较小(即能用计算机的int、long类型表示,并且相乘后的结果任然能够表示)那么直接用计算机 的乘法运算就可以了。这里的大数指的是用计算机的预设类型(int、long等)无法表示的数,如:11111111111 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111 阅读详情

相关推荐

JAVA大数据运算系列之大整数相乘

最近在准备面试,遇到很多大数据运算相关的面试题,这里做个记录。                     一、两个非负整数相乘 解题思路借鉴于:qwurey-Java实现大整数相乘 import java.util.Scanner; public class BigNumMultiply { static int N = 1000; static int a[] = new i

ld的专栏 2246

Java实现乘法的方法——(三种)

最近在看一篇java的笔试题,里面要求用效率最高的方法求2*8,然后第一反应就是直接使用Java自带的乘法,然后发现其实还可以使用位运算符 “<<” 进行计算(如移了N位则乘了2的N次方)。所以我从中总结了三种方法来实现乘法的计算。希望对大家有帮助 方法1(直接相乘): 该方法最直接: // An highlighted block int d = 2 * 8; System.out.println(d); //d = 16 方法2(for循环相加): 此方法利用了乘法的原理,即使用多

web15085599741的博客 3631

保姆级教程:从WOS下载文献到Citespace出图,手把手搞定科研可视化(附避坑指南)

本文提供从WOS下载文献到Citespace出图的完整科研可视化指南,涵盖数据采集、清洗、环境配置和可视化优化全流程。特别分享WOS检索技巧、数据清洗方法和Citespace参数设置,帮助科研新手高效生成专业图谱,避开常见技术陷阱。

weixin_29311017的博客 172

Java实现大数相乘

大数相乘算法,可以避免因得数过大超过数据范围而显示错误的问题。 我所使用的大数相乘算法为逐位相乘处理进位法,主要运用了数组倒序和数组数组移动的方法。 大致原理为:如12345×678,先将12345和678倒序,然后相乘,每一位的结果为相乘后的结果加上上一位的进位: 得到结果后,将三个得数数组进行移动然后相加,这一步可以同步执行: 最后的结果逆序输出,即为答案。 代码实现: import java.util.Scanner; public class Multiplication { public

Bare_Man的博客 3173

给粒子物理萌新的Geant4保姆级入门:从看懂B1示例代码到跑通第一个模拟

本文为粒子物理初学者提供Geant4的保姆级入门指南,从解析B1示例代码到跑通第一个模拟。详细介绍了环境准备、代码解析、可视化系统实战及扩展模拟的方法,帮助新手快速掌握Geant4的基本概念和工具包使用。

weixin_29231725的博客 500

Android Studio安装常见问题详解——Android Emulator Hypervisor Driver for AMD Processors installation failed.

目录一、问题描述二、解决方案2.1 开启CPU虚拟化2.2 禁用Hyper-V2.3 使用管理员命令行在驱动程序包中执行“silent_install.bat” 一、问题描述 新买的AMD轻薄本,在安装Android Studio时遇到问题: Android Emulator Hypervisor Driver for AMD Processors installation failed. 笔记本配置为: 二、解决方案 2.1 开启CPU虚拟化 设置虚拟化的步骤这里不进行详细介绍了。如果需要,可以自行百

Wendy的博客 4万+

java实现乘法的方法

首先,我们可以在一个函数中定义一个名为 double*的变量,然后函数返回时,我们就可以直接对这个变量进行赋值操作,这样我们就可以直接对这个变量进行乘法运算了。这里需要注意的是, final修饰的变量是不能修改的,所以如果你想修改这个变量,那么一定要在函数外面先定义一个新的变量。当我们在定义一个方法的时候,我们可以通过 public static修饰方法来进行操作,比如我们可以这样定义一个方法: public static修饰方法的意思是:这个方法只能被当前类的实例访问,而且不能被重载。

花生日记 6033

OpenHarmony自定义Launcher

OpenHarmony源码版本:4.0release开发板:DAYU / rk3568DevEco Studio版本:4.0.0.600切换分支为OpenHarmony-4.0-Release,并下载源码。

Abner_Crazy的博客 1630

java实现大数相乘的2种方式

按位运算–时间效率O(n^2) import java.util.LinkedList; import java.util.List; public class first { public static List<Integer> bigNumberMultiply2(int[] num1, int[] num2){ // 分配一个空间,用来存储运算的结果,num1长的数 * num2长的数,结果不会超过num1+num2长 LinkedList&lt

weixin_44001521的博客 1869

电化学-论文分享-NanoStat: An open source, fully wireless potentiostat

本文主要分享论文NanoStat: An open source, fully wireless potentiostat,并记录学习笔记。如果有条件,建议看原文最好。

分享技术笔记,希望对大家能够有一定的帮助,同时也通过归纳总结提升自己的个人能力。 2873

3D Slicer学习记录(4)-PLUSapp连接双目相机Intel Realsense

plusapp是基于openIGTLink协议的免费的开源库和应用程序API接口,用于数据采集、预处理、校准和实时流成像、位置跟踪和其他传感器数据。这里以intel realsense双目相机为例详细的演示整个图像流导入到3D Slicer的流程。

weixin_39090239的博客 1344

Java实现俩个大数相乘

不用BigInteger实现两个大数字相乘 思路 位数 1 2 3 数字 3 4 5 6 7 8 如表所示 两个数345和678 两个数位数相加为6的数积为40 两个数位数相加为5的数为32+35 两个数位数相加为4的数为24+30+28 两个数位数相加为3的数为21+24 两个数位数相加为2的数为18 然后逐次进行进位得到最终的数 代码实现 public static void main(String[] args) { System.out.print

sql计算日期到当前日期的年份 566

密码学与信息安全面试题及参考答案(2万字长文)

密码学是一门研究信息安全的学科,它涉及加密、解密以及保护数据免受非授权访问的技术和方法。这门学科的核心在于设计并分析各种协议,使通信双方即使在存在潜在敌手的环境中也能安全地传输信息。保密性:确保信息只能被预期的接收方读取,阻止未经授权的第三方获取信息的真实内容。完整性:保证数据在传输过程中不被篡改,确保接收方接收到的信息与发送方发送的信息完全一致。认证性:验证信息的来源,即确认信息确实是由声称的发送方发出的。不可否认性:确保发送方不能在事后否认曾经发送过某条信息。访问控制。

大模型大数据攻城狮的专栏 1994

两个大数相乘JAVA版

翻出了之前在庞果网编程英雄会上用JAVA实现的一个两个大数相乘的程序,和大家分享一下: public class MyMultiply { /** * @param args */ public static void main(String[] args) { // System.out.println("Hello world"); //String str1 = "

wangqiuyun的专栏 1万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

大数相乘、大数相加、大数相减Java版本

题目:两个非常大的数字相乘(相加,相减)        该题目在java中可以使用BigInteger类中的方法来实现。否则的话可以使用如下方式来实现。        大数相乘:假设有A和B两个大数,位数分别为a和b。根据我们平常手动计算乘法的方式可以看出,最终的结果的位数c

lichong_87的备忘录 2万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

算法之大数相乘

1. 大数相乘问题 计算:999999999999999999999999999999 x 999999999999999999999999999999 = ?(30个9乘以30个9) 在JAVA语言中表示数字的类型有byte、short、int、long,这些类型都有其表示的数据范围,超过了能表示的范围就会产生数据溢出,比如: // 输出int能表示的最大数加1后的数 System.out.println(Integer.MAX_VALUE + 1); int能表示的最大数是2147483647,但

天天向上 3341

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Java处理两个大数相乘

package com.ps.test; import java.util.Scanner;      public class bigNumMultiply {         /**       * 实现两个大数相乘       * @param args       */      public static final int MAX_LEN = 100

2847

Java大数相乘(使用BigInteger和BigDecimal以及使用数组实现大数相加)

文章目录1.BigInteger和BigDecimal2.大数相乘的题 1.BigInteger和BigDecimal 在 Java 中提供了用于大数字运算的类,即 java.math.BigInteger 类和 java.math.BigDecimal 类。这两个类用于高精度计算,其中 BigInteger 类是针对整型大数字的处理类,而 BigDecimal 类是针对大小数的处理类。 在运算中 BigInteger 类型可以准确地表示任何大小的整数值,它可以表示的范围比integer大得多了。 Big

押切徹的博客 2385

【LeetCode43:字符串相乘(大数相乘)(Java实现)】

字符串相乘或大数相乘问题

NorthSmile的博客 1611

JAVA中大数相乘的实现

大数的运算,其思想是将其看成字符串,因为int、double、long等数据类型都有大小限制 package compare; import java.util.ArrayList; import java.util.Collections; import java.util.Scanner; /** * 大数相乘,其主要思想是将其看成字符串处理 * @author HANS */ pub...

Fat Panda的博客 434

大数相乘 java_大数相乘——java版

之前面试的时候被问到两个很大很大的数相乘在java中怎么把它算出来,显然不能直接相乘,当时我只回答出来了用BigInteger,然而不是最好的答案。大数相乘的核心思想是将数字转化为字符串,然后逐位相乘转化最后才得出结果。先上一段代码:public static void main(String[] args) {String str1 = "23451515412151511212";String...

weixin_29822105的博客 786

JAVA两个大数相乘

大数处理是科研过程中常见的问题,尤其在天文学,气象学等。在面试中,大数处理,尤其是两个大数相乘更是常客。在Java语言中,长整型long占8个字节,能表示的最大值为2^64 = 9223372036854775807(Long.MAX_VALUE),而这只有19位,分配到每个数至多8位(两个数位数一样),远远不能满足要求。所以,大数相乘要换个思路,从乘法的原理入手,下面说说我的思路。 1,预处理

TWgFWHuD的博客 3333

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...

memory_cood的博客 1053
上一篇: Android中BaseAdapter的viewHolder工具类
下一篇: Android中的内部存储和外部存储
豪豪6
博客等级 码龄14年 6粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值