zoukankan      html  css  js  c++  java
  • 大数相乘算法

    蓝桥杯例题

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

    算法设计思路-点击这里

    算法实现代码C++

    const int maxn = 100;
    int a[maxn],b[maxn];
    int len1,len2;
    int ans[maxn];
    char aim[maxn];
    
    int main(){
        //freopen("in.txt","r",stdin);
        //读入并将数据方向反转
        memset(aim,0,sizeof(aim));
        scanf("%s",aim);
        len1 = strlen(aim);
        int cur = 0;
        for(int i=len1-1;i>=0;i--){
            a[cur++] = aim[i] - '0';
        }
        memset(aim,0,sizeof(aim));
        scanf("%s",aim);
        len2 = strlen(aim);
        cur = 0;
        for(int i=len2-1;i>=0;i--){
            b[cur++] = aim[i] - '0';
        }
        //完成输入
        memset(ans,0,sizeof(ans));
        for(int i=0;i<len1;i++){//a
            for(int k=0;k<len2;k++){//b
                //下面这句话要结合所给博客思路重点理解
                ans[i+k] += (a[i]*b[k]);
            }
        }
        //开始进位
        int jin = 0;
        for(int i=0;i<len1+len2;i++){
            ans[i] += jin;
            jin = ans[i] / 10;
            ans[i] %= 10;
        }
        //输出
        int s = len1 + len2;
        while(ans[s]==0)s--;
        for(int i=s;i>=0;i--){
            cout<<ans[i];
        }
        cout<<endl;
        return 0;
    }
    //774980393241726
    //774980393241726
    

    OK

  • 相关阅读:
    LG P4161 [SCOI2009]游戏/LG P6280 [USACO20OPEN]Exercise G
    BZOJ3473 字符串
    BZOJ4545 DQS的trie
    LG P5212 SubString
    batj ,tmd用的都是什么技术。
    java社招面试题目
    python,go,java 的发展
    互联网 后端技术必备知识
    java语言三件套
    java spring全家桶
  • 原文地址:https://www.cnblogs.com/savennist/p/13821800.html
Copyright © 2011-2022 走看看