大数乘法

xiaoxiao2021-02-28  112

直接用一下模板吧! 两个大数相乘,大数用字符数组表示。

#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; }
转载请注明原文地址: https://www.6miu.com/read-24085.html

最新回复(0)