我自己写错了,考虑到枚举其中一个组的数字去和另一个乘,即简化为一个个位数与大数相乘,但最后的相加成了问题
#include<bits/stdc++.h>
using namespace std;
void c(string a,char b){
int z=0;
for(int i=a.size()-1;i+1;i--){
int k=(a[i]-'0')*(b-'0')+z;
a[i]=k%10-'0';
z=k/10;
}
if(z)a.insert(0,z+"0");
a+='0';
}
int main(){
string a,b;
cin>>a>>b;
for(int i=b.size()-1;i+1;i--){
c(a,b[i]);
}
}
这里给出大佬的题解
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
char a1[10001],b1[10001];
int a[10001],b[10001],i,x,len,j,c[10001];
int main ()
{
cin>>a1>>b1;
int lena=strlen(a1);
int lenb=strlen(b1);
for(i=1;i<=lena;i++)a[i]=a1[lena-i]-'0';
for(i=1;i<=lenb;i++)b[i]=b1[lenb-i]-'0';
for(i=1;i<=lenb;i++)
for(j=1;j<=lena;j++)
c[i+j-1]+=a[j]*b[i];
for(i=1;i<lena+lenb;i++)
if(c[i]>9)
{
c[i+1]+=c[i]/10;
c[i]%=10;
}
len=lena+lenb;
while(c[len]==0&&len>1)len--;
for(i=len;i>=1;i--)cout<<c[i];
return 0;
}
给个传送门题解出处