大数乘法

本文介绍了一种处理大整数相乘的算法,通过将输入的大整数转换为字符数组,逐位进行乘法运算并累加结果,最终得到正确的乘积。此算法适用于当整数超出常规数据类型所能表示的范围时。

摘要生成于 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

解法:
第i位数乘第j位数,乘积是第i+j位数(从0开始) 
如123*456 
乘积各位数为 
个位 3*6 
十位 2*6 + 3*5 
百位 2*5 + 1*6 + 3*4 
千位 1*5 + 2*4 
万位 1*4 
然后从后往前,取余更新。

 1 #include <iostream>
 2 #include <string.h>
 3 
 4 using namespace std;
 5 
 6 char A1[1003],B1[1005];
 7 int A[1010]={0},B[1010]={0},C[2020]={0};
 8 
 9 int main()
10 {
11     int len1,len2;
12     cin>>A1>>B1;
13     len1 = strlen(A1);
14     len2 = strlen(B1);
15 
16     for(int i = 0;i <len1;i++)
17         A[len1-i-1] = A1[i] - '0';
18     for(int i = 0;i <len2;i++)
19         B[len2-i-1] = B1[i] - '0';
20 
21    
22 
23     for(int i = 0;i < 1010;i++)
24         for(int j = 0;j <1010;j++)
25         {
26             C[i+j] += A[i]*B[j];
27         }
28 
29     for(int i = 0;i < 2020-1;i++)
30     {
31         C[i+1] += C[i] / 10;
32         C[i] = C[i] % 10;
33     }
34 
35     int t = 2020;
36     while(C[t]==0)
37         t--;
38 
39     for(int i = t;i>=0;i--)
40         cout<<C[i];
41     cout<<endl;
42 
43     return 0;
44 }

 

转载于:https://www.cnblogs.com/a2985812043/p/7500238.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值