这段代码是一个实现大整数相乘的程序。首先,它使用了两个字符数组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分
11 人评分
C语言程序设计教程(第三版)课后习题6.3 (Java代码)浏览:695 |
众数问题 (C语言代码)浏览:911 |
【明明的随机数】 (C语言代码)浏览:845 |
IP判断 (C语言描述,蓝桥杯)浏览:1118 |
C语言程序设计教程(第三版)课后习题9.6 (C语言代码)浏览:627 |
简单的事情 (C语言代码)浏览:679 |
C语言程序设计教程(第三版)课后习题8.1 (C语言代码)浏览:765 |
1231题解(注意理解“输入多个测试实例”)浏览:830 |
整除的尾数 (C语言代码)浏览:852 |
WU-C语言程序设计教程(第三版)课后习题12.3 (C++代码)浏览:925 |