• 大数乘法


    当两个比较大的整数相乘时,可能会出现数据溢出的情形。为避免溢出,可以采用字符串的方法来实现两个大数之间的乘法。具体来说,首先以字符串的形式输入两个整数,每个整数的长度不会超过8位,然后把它们相乘的结果存储在另一个字符串当中(长度不会超过16位),最后把这个字符串打印出来。例如,假设用户输入为:62773417和12345678,则输出结果为:774980393241726.

    输入:
      62773417 12345678

    输出:
      774980393241726

    分析:数组存数实现

    //大数乘法问题
    /*输入:
      62773417 12345678
    
    输出:
      774980393241726*/
    
    #include<iostream>
    #include<cstring>
    using namespace std;
    int main()
    {
        string a,b;
        while(cin>>a>>b){
        int c[8]={0},d[8]={0},e[8]={0},f[16]={0};
        int tmp=0,tag=0;
        int len1=a.length();
        int len2=b.length();
        for(int i=0;i<len1;i++) c[i]=a[len1-1-i]-'0';
        for(int i=0;i<len1;i++) cout<<c[i];
        cout<<endl;
        for(int i=0;i<len2;i++) d[i]=b[len2-1-i]-'0';
        for(int i=0;i<len1;i++) cout<<d[i];
        cout<<endl;
        
        for(int i=0;i<len1;i++) {//被乘数  c 
            for(int j=0;j<len2;j++){//乘数  d
            e[j]=c[i]*d[j];
            f[i+j]+=e[j];
    }
    }
    for(int i=15;i>=0;i--) cout<<f[i]<<" ";
    cout<<endl;
    for(int i=0;i<16;i++)
    {
        f[i]+=tag;
        tag=f[i]/10;
        f[i]%=10;
    }
    for(int i=15;i>=0;i--) {
        if(f[i]!=0&&tmp==0) {
            tmp=1;
            cout<<f[i];
        }
        if(tmp)
    cout<<f[i];
    }
    
    cout<<endl;
    }
    } 
    View Code
  • 相关阅读:
    Codeforces Round #352 (Div. 1) B. Robin Hood (二分)
    Codeforces Round #209 (Div. 2) D. Pair of Numbers (模拟)
    Kattis
    kattis Curious Cupid (莫队算法)
    HYSBZ
    SPOJ NETADMIN
    day26-2 基于TCP协议的套接字编程
    day26-1 TCP三次握手和四次挥手
    day25-2 OSI协议和socket抽象层
    day25-1 网络架构与互联网组成
  • 原文地址:https://www.cnblogs.com/helloworld2019/p/10392688.html
Copyright © 2020-2023  润新知