51Nod-1027-大数乘法

本文介绍了一种处理大整数相乘的方法,并提供了一个使用C语言编写的详细示例。该方法通过字符串处理来实现两个大整数的乘法运算,适用于长度不超过1000位的大整数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给出2个大整数A,B,计算A*B的结果。
Input
第1行:大数A
第2行:大数B
(A,B的长度 <= 1000,A,B >= 0)
Output
输出A * B
Input示例
123456
234567
Output示例
28958703552

水题,不多解释了,就是字符串的处理!

代码C:

#include <stdio.h>
#include <string.h>
#define _MAX 1001

void Carrying(int tag,int i,int j,int *p);
int main(int argc, const char * argv[])
{
    int product[2 * _MAX],i=0,j=0,numOneLen,numTwoLen,tag;
    char numOne[_MAX],numTwo[_MAX];
    memset(product, 0, sizeof(int) * 2 * _MAX);                    //初始化product数据为0
    scanf("%s %s",numOne,numTwo);                    //存数据

    numOneLen=(int)strlen(numOne);
    numTwoLen=(int)strlen(numTwo);

    //数据逆序
    for (i=0; i<numOneLen/2; i++)
    {
        tag=numOne[i];
        numOne[i]=numOne[numOneLen-1-i];
        numOne[numOneLen-1-i]=tag;
    }
    for (i=0; i<numTwoLen/2; i++)
    {
        tag=numTwo[i];
        numTwo[i]=numTwo[numTwoLen-1-i];
        numTwo[numTwoLen-1-i]=tag;
    }

    //逐位相乘
    for (i=0; i<numOneLen; i++)
    {
        for (j=0; j<numTwoLen; j++)
        {
            tag=((int)numOne[i]-48)*((int)numTwo[j]-48);
            Carrying(tag, i, j, product);                          //递归
        }
    }

    //倒序输出结果
    for (i=_MAX * 2 - 1; i>0; i--)
    {
        if (product[i]!=0)
        {
            break;                                                          //查找到第一个不等于0的跳出
        }
    }
    for (j=i; j>=0; j--)
    {
        printf("%d",product[j]);
    }
    printf("\n");
    return 0;
}

//递归进位函数
void Carrying(int tag,int i,int j,int *p)
{
    p[i+j]+=tag;
    if (p[i+j]>9)
    {
        tag=p[i+j]/10;
        p[i+j] %=10;
        Carrying(tag, i+1, j, p);                                //写成Carrying(tag, i, j+1, p);也成立,为了让i+j递增而已
    }
    return ;
}

题是很水,但是代码还是挺长的……OVER!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值