您的位置:首页 > 其它

大数相乘

2013-09-29 18:50 363 查看
比赛中经常会遇到大数问题,自己写了一个大数相乘的模板,可能会有Bug,先凑合看吧;

#include<stdio.h>
#include<string.h>
const int M = 100;

void GetDigit(char s[],int a[])
{
int i;
memset(a,0,sizeof(int)*M);
int len = strlen(s);
for(i = 0; i < len; i++)
{
a[len-1-i] = s[i]-'0';
}
}

void Multiply(int a[], int b[], int c[])
{
int i,j;
for(i = 0; i < M*2; i++)
c[i] = 0;
for(i = 0; i < M; i++)
{
for(j = 0; j < M; j++)
{
c[i+j] += a[i]*b[j];
}
}

for(i = 0; i < 2*M; i++)
{
c[i+1] += c[i]/10;
c[i] %= 10;
}

}

int main()
{
char s1[M],s2[M],s[M*2];
int a[M],b[M],c[M*2];
int i,j;
while(~scanf("%s %s",s1,s2))
{
int len1 = strlen(s1);
int len2 = strlen(s2);

GetDigit(s1,a);
GetDigit(s2,b);
Multiply(a,b,c);

while(c[j] == 0)
j--;
for(i = j; i >= 0; i--)
printf("%d",c[i]);
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: