7-41 大数的乘法 (10 分)

简介: 7-41 大数的乘法 (10 分)

7-41 大数的乘法 (10 分)


输入一个大正整数和一个非负整数,求它们的积。


输入格式:


测试数据有多组,处理到文件尾。每组测试输入1个大正整数A(位数不会超过1000)和一个非负整数B(int范围)。


输出格式:


对于每组测试,输出A与B的乘积。


输入样例:


1 1
123 100
12345678910 8
123456789101234567891012345678910 7


输出样例:


1
12300
98765431280
864197523708641975237086419752370


出处:


ZJUTOJ 1027


说明:


原题的B是一位数,本题修改为int范围内的整数


#include<iostream>
using namespace std;
int main(){
  string a,b;
    while(cin>>a>>b){
        int res[10001];
        memset(res,0,sizeof(res));
        for(int i=0; i<a.size();i++){
            for(int j=0;j<b.size();j++){
                res[i+j]+=(a[i]-'0')*(b[j] - '0');
            }
        } 
        if(res[0]>=10) cout<<res[0]/10;
        for(int i=a+b-1;i>0;i--){
            if(res[i]>=10){
                res[i-1]+=res[i]/10;
                res[i]%=10;
            }
        }
        for(int i=0;i< a+b-1;i++){
            cout<<res[i];
        }cout<<endl;
    }
  return 0;
}


#include<iostream>
using namespace std;
int main(){
    int n,t=0;string s1,s2;
    cin>>n;
    for(int i=1;i<=n;i++){
        printf("Case %d:",i);
        cin>>s1>>s2;
        cout<<endl<<s1<<" + "<<s2<<" = ";
        int m=max(s1.size(),s2.size());
        int a[m]={0},b[m]={0},c[m]={0};
        for(int j=s1.size()-1;j>=0;j--) a[s1.size()-1-j]=s1[j]-'0';
        for(int j=s2.size()-1;j>=0;j--) b[s2.size()-1-j]=s2[j]-'0';
        int t=0;
        for(int j=0;j<m;j++){
            t+=a[j]+b[j];
            c[j]=t%10;
            t=t/10;
        }
        if(t)cout<<t;
        for(int j=m-1;j>=0;j--) cout<<c[j];
        cout<<endl;
        if(i!=n) {cout<<endl;}
    }
    return 0;
}


#include<iostream>
#include<vector>
using namespace std;
int main(){
    int n,cnt=0;
    cin>>n;
    for(int i=1;i<=n;i++){
        string a,b;
        cin>>a>>b;
        printf("Case %d:\n",i);
        cout<<a<<" + "<<b<<" = ";
        vector<int> A,B,C;
        for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');
        for(int i=b.size()-1;i>=0;i--) B.push_back(b[i]-'0');
        for(int i=0,t=0;i<A.size()||i<B.size()||t;i++){
            if(i<A.size()) t+=A[i];
            if(i<B.size()) t+=B[i];
            C.push_back(t%10);
            t/=10;
        }
        for(int i=C.size()-1;i>=0;i--) cout<<C[i];
        cnt++;
        if(cnt==n)break;
        cout<<endl<<endl;
    }
    return 0;
}
目录
相关文章
|
7月前
|
存储 算法 Python
技术心得记录:大整数算法【10】Comba乘法(实现)
技术心得记录:大整数算法【10】Comba乘法(实现)
40 0
|
7月前
|
BI
1051 复数乘法 (15 分)
1051 复数乘法 (15 分)
|
机器学习/深度学习 编解码 算法
RSA大作业 实现了 1.加、减、乘、除、移位、幂取模的高精度算法 2.利用快速幂和牛顿迭代法加速取模运算 3.中国剩余定理 4.Miller Rabin检测
RSA大作业 实现了 1.加、减、乘、除、移位、幂取模的高精度算法 2.利用快速幂和牛顿迭代法加速取模运算 3.中国剩余定理 4.Miller Rabin检测
240 0
RSA大作业 实现了 1.加、减、乘、除、移位、幂取模的高精度算法 2.利用快速幂和牛顿迭代法加速取模运算 3.中国剩余定理 4.Miller Rabin检测
|
存储 算法
经典算法之异或运算(无进位相加)
经典算法之异或运算(无进位相加)
经典算法之异或运算(无进位相加)
7-2 一元多项式的乘法与加法运算 (20 分)
7-2 一元多项式的乘法与加法运算 (20 分)
152 0
L1-080 乘法口诀数列 (20 分)
L1-080 乘法口诀数列 (20 分)
231 0
7-237 有理数加法 (15 分)
7-237 有理数加法 (15 分)
108 0
|
存储 算法
高精度加法,模拟大数的加法运算
在处理特别大的数相加特别大的数的时候,long long不能直接通过加法算出结果的时候,可以通过高精度算法处理这些数的相加具体·思路如下; 首先 1 . 这些数存到数组的时候该如何排列,是个位放在第一位还是最后一位放到第一位,由于数的相加的候常常出现进位,常在最后一位加上一个数,而加上数的话往往在数组最后一位加上数比较方便,所以我们把第个位放在数组第一位 2.其次在调用模拟大数相加的函数中,我们该如何处理同一位上数相加出现的进位呢,我们可以设置一个 t 存储数组上某位相加最后吧 t%10 ,就可以得到想要的数,同时在 t / 10 如果 t 会的得到 1 或者 0.
142 0