大数相乘,求两个不超过100位的数的乘积

mac2026-04-21  8

标题大数相乘,求两个不超过100位的数的乘积。(提示:用数组保存两个大数)

**例如: 输入: 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 输出: 7407407407407407407407405925925925925925925925926**`` #include <stdio.h> int main() { int a[100] = {0},b[100] = {0},c[200] = {0}; //定义数组a、b用来存储两个大数,数组c用来存储两大数相乘之积 char sa[100] = {0},sb[100] = {0}; //定义两个字符串用来接收两个大数(字符串的长度不收限制) int i,j; //定义两个循环变量 int m = 0,n = 0; //定义m、n并赋值为0用来记录大数的位次 scanf("%s %s",sa,sb); //用字符串来接收数据 while(sa[m] != '\0') //用两个while循环实现将字符串转换成数组,方便之后的计算 { a[m] = sa[m] - '0'; m++; } while(sb[n] != '\0') { b[n] = sb[n] - '0'; n++; } for(j = 0;j < n;j++) //for循环嵌套实现两大数相乘并将其乘积放入相同的位次(注意将c[0]位空出来方便解决之后有可能出现的进位问题) { for(i = 0;i < m;i++) { c[i + j + 1] += a[j] * b[i]; } } for(i = m + n - 1;i >= 0;i--) //for循环将c数组里的数实现进位 { if(c[i] > 9) { c[i - 1] += c[i] / 10; c[i] %= 10; } } i = 0; printf("\n这两数相乘之积为:\n"); if(c[i] == 0) //判断c[0]位是否存在进位问题 { for(i = 1;i < m + n - 1;i++) { printf("%d",c[i]); } } else { for(i = 0;i < m + n - 1;i++) { printf("%d",c[i]); } } return 0; }
最新回复(0)