高精度乘法

来源:互联网 发布:网络课程评价标准 编辑:程序博客网 时间:2024/06/05 08:23
#include <stdio.h>#include<string.h>#define MAX   200                                   //最大位数int main(){    int j,k;    int len1,len2,len,flag;    int c1[MAX],c2[MAX],ans[MAX+MAX+1];             //int存储大数    char d1[MAX+1],d2[MAX+1];                       //读入大数    memset(ans,0,sizeof(ans));                      //方便输出结果    printf("Please input a big number:");    scanf("%s",d1);    printf("Please input another big number:");    scanf("%s",d2);    len1=strlen(d1);    len2=strlen(d2);    j=0;    k=len1-1;    while(d1[j] != '\0')                        //转换成数字存放在int数组        c1[k--]=d1[j++]-'0';    j=0;    k=len2-1;    while(d2[j] != '\0')                        //转换成数字存放在int数组        c2[k--]=d2[j++]-'0';    //处理因子为0    if(!c1[len1-1] || !c2[len2-1] )    {        printf("%s * %s = 0\n",d1,d2);        return 0;    }    //乘法    for(k=0; k<len2; k++)        for(j=0; j<len1; j++)            ans[k+j]+=c1[j]*c2[k];              //列竖式    //处理进位    len=len1+len2+1;                            //结果位数不能超过两个数字位数和+1    for(k=0; k<len; k++)        if(ans[k]>=10)        {            ans[k+1]+=ans[k]/10;            ans[k]%=10;        }    //输出结果    printf("%s * %s = ",d1,d2);    flag=0;    while(len--)    {        if(ans[len]!=0)            flag=1;        if(flag)            printf("%d",ans[len]);    }    putchar('\n');    return 0;}
1 0
原创粉丝点击