C++多位整形数据相乘的代码

本文介绍了一种使用C++实现的大数乘法算法。通过将输入的两个字符串类型的数字转换为内部数组表示,并利用逐位乘法和进位处理的方法,实现了两个大数之间的精确乘法运算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<iostream>
#include<string.h>
void mutilpy(char *str,char *str1){//返回一个指向数组的指针
//std::cout<<strlen(str);测试是否可以读取到有多少个字符
int *sum = (int *)malloc(sizeof(int)*(strlen(str) + strlen(str1)));//为sum开辟内存空间
memset(sum, 0, sizeof(int)*(strlen(str) + strlen(str1)));//对创建的数组进行赋值
//下面这个是将相乘的数据整合到一个数组里面
for (int i = 0; i < strlen(str);i++){
for (int j = 0; j < strlen(str1); j++){
sum[i + j + 1] += (str[i]-'0') * (str1[j]-'0');//第一个位置空出来,作为预留的位置,减0是为了让数字和int类型相对应
}
}
for (int i = strlen(str) + strlen(str1)-1; i >0; i--){
if (sum[i] >= 10){//先判断是否符合条件
sum[i - 1] += sum[i] / 10;//先向前进位
sum[i] %= 10;
}
}
int tmp = strlen(str) + strlen(str1) - 1;
while (sum[tmp] == 0){
tmp--;//去掉后面为0的数
}
for (int i = 0; i <= tmp; i++){
if (i == 0 && sum[i] == 0){//第一个为0的情况
continue;
}
std::cout << sum[i];//输出结果
}
std::cout << std::endl;//打印换行
}
void main(){
char str[105] = { 0 };//定义一个100以内的字符数组
char str1[105] = { 0 };
std::cout << "请输入两个正整数,你将得到这两个整数的乘积(两个数的长度控制在0-100之间)"<<std::endl;
std::cin >> str >> str1;//输入一个整数的值
mutilpy(str, str1);//调用大数据乘法函数
//std::cout << str << str1 << std::endl;检测输入是否正确
system("pause");

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值