原题链接:大整数乘法
这段代码是一个实现大整数相乘的程序。首先,它使用了两个字符数组s1和s2来存储两个大整数,并通过字符串输入的方式获取这两个大整数。然后,通过将字符转换为数字,将它们存储到数组a和b中。接下来,它定义了一个数组c来存储乘法运算的结果。然后,通过两个嵌套的for循环,将数组a和b中的每一位进行相乘,并将结果存储到数组c中的对应位置。最后,通过一个while循环,去除数组c中高位的零,并通过一个for循环,从高位到低位输出数组c中的每一位,即为两个大整数相乘的结果。

#define _CRT_SECURE_NO_WARNINGS // 禁止警告
#include <stdio.h> // 包含标准输入输出库
#include <math.h> // 包含数学库
#include <string.h> // 包含字符串处理库
#include <stdlib.h> // 包含标准库
// 声明整型数组a、b、c和字符数组s1、s2
int a[2005], b[2005], c[4010];
char s1[2005], s2[2005];
// 主函数
int main()
{
// 从标准输入中读取字符串s1和s2
scanf("%s", s1);
scanf("%s", s2);
// 计算字符串s1和s2的长度
int la = strlen(s1);
int lb = strlen(s2);
// 将字符串s1和s2中的字符转换为数字存入数组a和b
for (int i = 0; i < la; i++)
{
a[la - i] = s1[i] - '0';
}
for (int i = 0; i < lb; i++)
{
b[lb - i] = s2[i] - '0';
}
// 计算数组c的长度
int lc = la + lb;
// 计算数组c的值
for (int i = 1; i <= la; i++)
{
for (int j = 1; j <= lb; j++)
{
c[i + j - 1] += a[i] * b[j];
c[i + j] += c[i + j - 1] / 10;
c[i + j - 1] %= 10;
}
}
// 移除数组c前面的零
while (c[lc] == 0 && lc > 1) lc--;
// 输出数组c中的值
for (int i = lc; i > 0; i--)
{
printf("%d", c[i]);
}
// 返回0,表示程序正常运行结束
return 0;
}0.0分
7 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复