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

  • 相关阅读:
    收藏的 30 个CSS 代码段
    Power designer 15生成sql server 2005/2008列注释
    华为网盘
    敏捷宣言(一)
    敏捷宣言(三) Scrum是一种敏捷实践
    敏捷宣言(二) 何为敏捷
    我也曾哭过[转]
    你以为我穷,不好看,就没有感情吗?[转]
    关于异性朋友
    Gone With the Wind[转]
  • 原文地址:https://www.cnblogs.com/savennist/p/13821800.html
Copyright © 2011-2022 走看看