大数相乘

来源:互联网 发布:路由器缺省域名怎么填 编辑:程序博客网 时间:2024/05/29 16:09

利用字符串处理大数

#include <iostream>#include <string.h>using namespace std;void multiply(const char* a, const 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;for(i=0; i<ca; i++)//a[i]*b[j]的乘积存放在s[i+j+1]中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;}char *c=(char *)malloc((ca+cb)*sizeof(char));i=0;while(s[i]==0)//去除前导0i++;for(j=0; i<ca+cb; i++, j++)c[j]=s[i]+'0';for(i=0; i<j ;i++)cout<<c[i];cout<<endl;free(s);}int main(){const char* p1="1234567891222";const char* p2="41232121212121";multiply(p1, p2);return 0;}


 

原创粉丝点击