大数乘法

来源:互联网 发布:tp5框架架构源码下载 编辑:程序博客网 时间:2024/06/07 05:09

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

#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;}
0 0