大数运算 (正整型)(三)—— 大数乘法

/**  大数乘法  **/
#include<stdio.h>
#include<string.h>
#define N 500
int multy[1000];     //一千位以下的大数
void multiplyer(char *a,char *b)
{
    int i,j,num,tem,h;
    char k;
    memset(multy,0,sizeof(multy));
    for(i=strlen(a)-1; i>=0; i--)
        for(j=strlen(b)-1,tem=strlen(a)-1-i; j>=0; j--,tem++)
        {
            num=(a[i]-'0')*(b[j]-'0')+multy[tem];     // 转化成两个数字相乘
            multy[tem]=num%10;                         // num%10得到的数为muity本位的数字
            multy[tem+1]+=num/10;                     // num/10得到的是向前进位的数字
        }
    for(i=999; i>=0; i--)     //从multy数组999位开始遍历,找到第一个不为0的数字,即:两数相乘得到的数的的最高为数字
        if(multy[i])
            break;
    if(i==-1)                 //注意,当输入的数字为0时,i 为-1,但数字与零相乘需输出 0,因此此处需特殊处理
        i=0;
    for(; i>=0; i--)
        printf("%d",multy[i]);
    puts("");
}
int main()
{
    char a[N+1],b[N+1];
    while(scanf("%s%s",a,b)==2)    
        multiplyer(a,b);
    return 0;
}


你可能感兴趣的:(大数运算 (正整型)(三)—— 大数乘法)