zoukankan      html  css  js  c++  java
  • [Nowcoder] 大整数相乘(拼多多笔试题)

    有两个用字符串表示的非常大的大整数,算出他们的乘积,也是用字符串表示。不能用系统自带的大整数类型。 

    输入描述:
    空格分隔的两个字符串,代表输入的两个大整数
    输出描述:
    输入的乘积,用字符串表示
    输入例子1:
    72106547548473106236 982161082972751393
    输出例子1:
    70820244829634538040848656466105986748


    大数乘法问题

    简单来说就是把A[i]*B[j]累加放到临时数组的C[i+j]位置。

    然后对数组C执行进位加法即可。

    剩下的步骤就是字符与数字之间的转换与逆序问题。

    参考代码如下:

    #include <iostream>
    #include <string>
    #include <vector>
    using namespace std;
    
    int main()
    {
        string str1, str2;
        while (cin >> str1 >> str2)
        {
            int n1 = str1.size(), n2 = str2.size();
            vector<int> v1, v2;
            // 将两个字符串放入数组中并逆序
            for (int i = n1 - 1; i >= 0; --i)
            {
                v1.push_back(str1[i] - '0');
            }
            for (int i = n2 - 1; i >= 0; --i)
            {
                v2.push_back(str2[i] - '0');
            }
            // 待处理的临时数组
            vector<int> v(n1 + n2, 0);
            for (int i = 0; i < n1; ++i)
            {
                for (int j = 0; j < n2; ++j)
                {
                    v[i + j] += v1[i] * v2[j];
                }
            }
            // 处理数组中的加法进位
            for (int i = 0; i < n1 + n2-1; ++i)
            {
                v[i + 1] += (v[i] / 10);
                v[i] = v[i] % 10;
            }
            string res;
            // 判断最终结果的有效位数
            int m = n1 + n2 - 1;
            if (v[n1 + n2 - 1] == 0)
                m = n1 + n2 - 2;
            // 将结果转换为字符串
            for (int i = m; i >= 0; --i)
            {
                res += (v[i] + '0');
            }
            cout << res << endl;
        }
        return 0;
    }    
  • 相关阅读:
    sc 使用
    sql端点应用
    今天面试笔试了一道SQL面试题,狠简单
    指定域的名称或安全标识SID与该域的信任信息不一致
    查询登陆时间间隔不超过5分钟的所有记录
    sql打开xls
    Android控件开发
    android开发1【转】网络设备状态检测
    google.maps Simple Polylines
    Notification 使用详解(很全
  • 原文地址:https://www.cnblogs.com/immjc/p/9420387.html
Copyright © 2011-2022 走看看