直接用一下模板吧!
两个大数相乘,大数用字符数组表示。
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
using namespace std;
char c[40];
typedef long long LL;
void multiply(char *a, char *b)//大数相乘
{
int i,j,ca,cb,*s;
ca=strlen(a);
cb=strlen(b);
s=(int *)malloc(sizeof(int)*(ca+cb)); //分配存储空间
for (i=0;i<ca+cb;i++) s[i]=0; // 每个元素赋初值0
for (i=0;i<ca;i++)
for (j=0;j<cb;j++)
s[i+j+1]+=(a[i]-'0')*(b[j]-'0');
for (i=ca+cb-1;i>=0;i--) // 这里实现进位操作
if (s[i]>=10)
{
s[i-1]+=s[i]/10;
s[i]%=10;
}
i=0;
while(s[i]==0) i++; // 跳过头部0元素
for (j=0;i<ca+cb;i++,j++) c[j]=s[i]+'0';
c[j]='\0';
for (j=0;j<ca+cb;j++)
cout<<c[j];
}
int main()
{
int T;
scanf("%d",&T);
int kase = 0;
while(T--)
{
char a[20], b[20];
LL t;
scanf("%s%s",a, b);
multiply(a,b);
printf("\n");
}
return 0;
}