码迷,mamicode.com
首页 > 其他好文 > 详细

模板整理~~~~~大整数乘法

时间:2018-05-09 17:28:08      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:链接   while   ati   正整数   int   stream   des   一个   ble   

大整数乘法:概念上就是一个用int,long, long long ,double等存不了的数,长度为几百位

      所以我们用字符串来存储并且从最小位开始存,然后大整数乘法也就转化成了

      小学里的竖式乘法的问题。

 例题:

链接:https://www.nowcoder.com/acm/contest/118/E
来源:牛客网

题目描述

技术分享图片
Kirai聊天的时候非常喜欢发“233”,“233”来源于猫扑表情第233号,是一张捶地大笑的表情。
Kirai每当看到很好玩的消息的时候总会回一串“2333...”。
Kirai其实十分高冷,他发现了这个问题。为了不希望别人立刻知道他在笑,他决定将两个“233..”乘在一起发出去。

输入描述:

输入样例有多组,全部是正整数。首先输入样例组数T(T≤1500)。
接下来输入T组数,每组数字由两个233串组成,每个233串长度3≤n≤50。
数据保证每个233串必然会有一个2作为开头,并且3的数量≥2。

输出描述:

两个233串的乘积。
示例1

输入

2
233 233
23333333333333333333333333333333333333333333333333 23333333333333333333333333333333333333333333333333

输出

54289
544444444444444444444444444444444444444444444444428888888888888888888888888888888888888888888888889
c++代码如下
技术分享图片
#include<cstdio>
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
char a[100],b[100];
int c[100],d[100];
void Bigintercheng(){
    memset(c,0,sizeof(c));
    memset(d,0,sizeof(d));
    int lena=strlen(a);
    int lenb=strlen(b);
    for(int i=0;i<lena;i++){
        c[i]=a[lena-i-1]-0;
    }
    for(int j=lenb-1;j>=0;j--){
        for(int i=0;i<lena;i++){
            d[i+lenb-1-j]+=c[i]*(b[j]-0);
        }
    }
    for(int i =0;i<lena+lenb-1;i++){
        d[i+1]+=d[i]/10;
        d[i]%=10;
    }
    int f=0;
    for(int i=500;i>=0;i--){
        if(!d[i]&&!f) continue;
        f=1;
        printf("%d",d[i]);
    }
    printf("\n");
}
int main()
{
    int t;
    scanf("%d",&t);
    while(t--){
        cin>>a>>b;
        Bigintercheng();
    }
}
View Code

java代码如下

因为java有大整数的包,所以直接求解就行(java大法好

技术分享图片
import java.math.BigInteger;
import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] args) {
     
        int t;
        Scanner in = new Scanner(System.in);
        t=in.nextInt();
        for(int i=0;i<t;++i)
        {
            BigInteger a=in.nextBigInteger();
            BigInteger b=in.nextBigInteger();
            System.out.println(a.multiply(b));
        }
        in.close();
    }
 
}
View Code

python代码如下(人生苦短,我用python

技术分享图片
t = int(raw_input())
while t > 0:
    t-=1
    a, b = raw_input().split()
    print(int(a)*int(b))
View Code

python大法好!

 




模板整理~~~~~大整数乘法

标签:链接   while   ati   正整数   int   stream   des   一个   ble   

原文地址:https://www.cnblogs.com/buerdepepeqi/p/9015387.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!