栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

大整数乘法(c语言+java+py)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

大整数乘法(c语言+java+py)

1.乘法规律,一个数的第i位和另一个数的第j位相乘,一定会累加到结果的第i+j位,结果的数组一个数组元素存2位数,最后对结果处理进位,最后打印出来。
注:相乘后的位数k不会超过m+n。
乘法计算步骤如下:
a数组存一个数,b数组存一个数,按位相乘后放入c数组中。

C语言代码:(时间复杂度为小于O(n²),分治法,错位相加)
#include
#include
#include
#define M 10000
char s1[M],s2[M],s[M];
int a[M],b[M],c[M];
int main(){
    int i,j,m,n,k;
    scanf("%s%s",s1,s2); 
    memset(c,0,sizeof(c));
    n=strlen(s1);
    m=strlen(s2);
    
    k=n+m;//保证相乘后的位数不会大于k
    printf("s1的长度=%d s2的长度=%dn",n,m);
	
    for(i=0; i=10){
            c[i+1]=c[i+1]+c[i]/10;
            c[i]=c[i]%10;
        }
    }
	
    i=k;
    while(c[i]==0) i--;
	
    if(i<0){
    	printf("0");	
	} 
    else{
        for(; i>=0; i--)
            printf("%d",c[i]);
    }
    printf("n");
    return 0;
}

代码运行和计算结果如下:

Java语言:
import java.util.Scanner;
public class BigDecimal {
    // 以字符串的方式输入两个超大的整数,将两个数值相乘的结果计算出来
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String a = in.next();
        String b = in.next();
        String result = multiply(a, b);
        System.out.println(result);
    }
    // 计算两个整数相乘
    private static String multiply(String a, String b) {
        //用来存储结果
        StringBuilder ans = new StringBuilder();
        //反转两个大整数,以便从个位开始相乘
        StringBuilder a1 = new StringBuilder(a);
        StringBuilder b1 = new StringBuilder(b);
        a1.reverse();
        b1.reverse();
        //用来存储中间计算的结果
        int[] arr = new int[a1.length() + b1.length()];
        //开始相乘,从两个大整数的个位开始,也就是反转后的第一位
        for(int i = 0; i < a1.length(); i++){
            //b的每一位与a的第i为乘积,每循环乘b每一位一次,a移动一位
            for(int j =0; j < b1.length();j++){
                //这里构成了错位相加,进而保存了结果中每一位的累加和,这里数字的字符与‘0’字符相减等于数字本身
                arr[i+j] += (a1.charAt(i) - '0') * (b1.charAt(j) - '0');
            }
        }
        //给每一位大于十的进位,保留余数
        for(int i = 0; i < arr.length - 1; i++){
            arr[i+1] += arr[i] / 10;
            arr[i] %= 10;
        }
        //把结果放到答案集里面去
        for(int i = 0; i < arr.length - 1; i++){
            ans.append(arr[i]);
        }
        return ans.reverse().toString();
    }
}

代码思想和C语言基本一致。
计算结果如下:

python语言:

由于python具有无限精度的int类型,所以用python实现大整数乘法是没意义的,但是思想是一样的。

我是罡罡同学,一位初入网安的小白。☜(ˆ▽ˆ)
(疯狂暗示 点赞 !关注!转发 !!! 点赞 !关注!转发 !!!)

  • 您的支持是罡罡同学前进的最大动力!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/302819.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号