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

屏幕截图 2023-12-19 100638.png

#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;
}


点赞(165)
 

0.0分

7 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论