思路

由于大数计算会超过long long的范围,所以利用数组来保存每一位的数字。首先利用字符串接收两个数字,在分别把两个数字放到数组里面,第一个元素放数字长度,后面的从低位到高位放置数字。找到两个数字最大的长度,将两个数字相乘。注意相乘是需要两个两个数字每一位相乘,所以需要两个循环,而每两位相乘最后得到的位数是i+j-1,每次计算都需要与数组c中原本的数字相加,最后排除最高的零按位输出。

代码

#include<bits/stdc++.h>
using namespace std;
int main() {
    string s1,s2;
    int a[300],b[300],c[600];//c存放结果
    int i,j;
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    memset(c,0,sizeof(c));
    cin>>s1>>s2;
    a[0]=s1.length();
    b[0]=s2.length();
    for(int i=1; i<=a[0]; i++) {
        a[i] = s1[a[0]-i]-'0';
    }
    for(int i=1; i<=b[0]; i++) {
        b[i] = s2[b[0]-i]-'0';
    }
    //按位处理
    for(int i = 1; i<=a[0]; i++) {
        for(int j=1; j<=b[0]; j++) {
            c[i+j-1]+=a[i]*b[j];
            c[i+j]+=c[i+j-1]/10;
            c[i+j-1]%=10;
        }
    }
    int len = a[0]+b[0]+1;
    while((c[len]==0&&(len>1)))len--;//去掉最高位的零
    for(int i=len; i>=1; i--) {
        cout<<c[i];
    }
    return 0;
}

一只小菜鸡