2 条题解

  • 1

    写了整整一天才调试出来(我是蒟蒻)
    看看就行,代码注释得很清楚

    #include<iostream>
    #define N 100010
    using namespace std;
    int a[N], b[N]; //全局数组自动初始化为零
    inline int Mul(int a[], int lena, int b[], int lenb)
    {
    int c[N] = { 0 }; //临时存放计算结果的数组
    int lenc = lena + lenb; //c 数组的位数不会超过其和
    for (int i = 0; i < lena; i++)
    {
    for (int j = 0; j < lenb; j++)
    {
    c[i + j] += a[i] * b[j]; //核心算法
    c[i + j + 1] += c[i + j] / 10; //进位
    c[i + j] %= 10; //留位
    }
    }
    if (c[lenc-1] == 0 && lenc > 0) //计算结果数组长度
    lenc--; //消除前置零(理论上最多出现一个前置零所以只用减一次)
    for (int i = 0; i < lenc; i++)
    a[i] = c[i]; //用结果c数组覆写a数组便于后续反复调用
    return lenc;
    }
    int main()
    {
    int i = 0, x, n, ans;
    int len, lena;
    cin >> x >> n;
    while (x != 0)
    {
    a[i] = x % 10;
    b[i] = x % 10;
    x /= 10;
    i++;
    }
    len = lena = i; //初始位数
    for (int i = 1; i < n; i++)
    lena = Mul(a,lena,b,len);
    for (int i = lena-1; i >= 0; i--)
    cout << a[i]; //反向输出结果
    return 0;
    }

  • 0
    @ 2022-08-05 11:54:46

    求大神帮忙康康 哪儿错了 跪求

    写了3小时 没写出来

    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
    unsigned long long a,b,sum=0;
    cin>>a>>b;
    for(int i=1;i<=b;i++)
    {
    sum=a*a;
    a=a+a-1;
    }
    cout<<a-1;

    return 0;
    }
    /*输入2 40
    输出的:1099511627776
    答案: 1099511627776*/
    /*输入2 32
    输出的:4294967296
    答案: 4294967296*/

  • 1

A11-1 高精度整数与常规整数的乘法

信息

难度
7
分类
(无)
标签
递交数
531
已通过
101
通过率
19%
被复制
8
上传者