大数乘法

来源:互联网 发布:人不知而不愠的知 编辑:程序博客网 时间:2024/04/29 13:48

大数乘法

Sample Input
111111111111
222222222222


Sample Output
24691358024641975308642

1

#include<stdio.h>#include<string.h>int main(){    int f;    int i,j,an,bn,k,d;    char a[1000],b[1000];    int af[1000]= {0},bf[1000]= {0},c[1000]= {0};    while(scanf("%s%s",a,b)!=EOF)    {        an=strlen(a);        bn=strlen(b);        k=an>bn?an:bn;        c[0]=0;        f=0;        for(i=0; i<an; i++)            af[i]=a[an-i-1]-'0';        for(i=0; i<bn; i++)            bf[i]=b[bn-i-1]-'0';        for(j=0; j<bn; j++)        {            for(i=0; i<an; i++)            {                d=c[i+j];                c[i+j]=(d+bf[j]*af[i])%10;                c[i+1+j]+=(d+bf[j]*af[i])/10;            }        }        for(i=an+bn; i>=0; i--)        {            if(c[i])                f=1;            if(f || i==0)                printf("%d",c[i]);        }        printf("\n");        for(i=0; i<2*k; i++)            c[i]=af[i]=bf[i]=0;    }}

2

#include <stdio.h>#include <string.h>#define MAX_LEN 200unsigned an1[MAX_LEN+10];unsigned an2[MAX_LEN+10];unsigned aResult[MAX_LEN * 2 + 10];char szLine1[MAX_LEN+10];char szLine2[MAX_LEN+10];int main(){    gets( szLine1); //gets函数读取一行    gets( szLine2);    int i, j;    int nLen1 = strlen( szLine1);    memset( an1, 0, sizeof(an1));    memset( an2, 0, sizeof(an2));    memset( aResult, 0, sizeof(aResult));    j = 0;    for( i = nLen1 - 1;i >= 0 ; i --)        an1[j++] = szLine1[i] - '0';    int nLen2 = strlen(szLine2);    j = 0;    for( i = nLen2 - 1;i >= 0 ; i --)        an2[j++] = szLine2[i] - '0';    //每一轮都用an2的一位,去和an1各位相乘,从an1的个位开始    for( i = 0;i < nLen2; i ++ )    {        //用选定的an2的那一位,去乘an1的各位        for( j = 0; j < nLen1; j ++ )            //两数第i, j位相乘,累加到结果的第i+j位            aResult[i+j] += an2[i]*an1[j];    }    //下面的循环统一处理进位问题    int nHighestPos = 0;    for( i = 0; i < MAX_LEN * 2; i ++ ) {        if( aResult[i] >= 10 ) {            aResult[i+1] += aResult[i] / 10;            aResult[i] %= 10;        }        if( aResult[i] )    nHighestPos = i;    }    for( i = nHighestPos; i >= 0; i -- )        printf("%d", aResult[i]);    return 0;}
1 0
原创粉丝点击