C++大数乘法

#include<iostream>
#include<Cstdlib>
#include<memory>
#include<Cstring>

using namespace std;

#define MAX 1024
/*计算2664乘以4525
2664
4525

          10 30 30 20        5
       4  12 12 8            2
   10 30  30 20              5
8  24 24  16                 4

8  34 58  68 62 38 20

12  0  5   4  6  0  0 
步骤一:乘数从个位挨个乘以被乘数
*/

char * change(char * p)//字符串反转
{
	for (int i = 0; i < strlen(p) / 2; i++)
	{
		char temp(0);
		temp = p[i];
		p[i] = p[strlen(p) - 1 - i];
		p[strlen(p) - 1 - i] = temp;
	}
	return p;
}

char * sub(char * beichengshu, char * chengshu)
{
	char * subji=new char[MAX];
	int cslen = strlen(chengshu) - 1,bcslen= strlen(beichengshu) - 1;
	int si = 0;
	int sum[MAX]{ 0 };
	for (int i = cslen; i>= 0; i--)
	{
		for (int j = bcslen; j >=0 ; j--)
		{
			int temp = (chengshu[i] - 48)*(beichengshu[j] - 48);
				sum[i + j] += temp;//乘数的位挨个与被乘数相乘 8  34 58  68 62 38 20 结果存入数组
		}
	}
	int k;
	for (k = cslen + bcslen; k > 0; k--)
	{
		subji[si] = (sum[k] % 10)+48;//0  5   4  6  0  0 
		sum[k - 1] += (sum[k] - sum[k] % 10) / 10;//进位
		si++;
	}

	//处理最后一个12
	subji[si++] = (sum[0] % 10) + 48;
	if (((sum[0] - sum[0] % 10) / 10) != 0)
	{
		subji[si] = ((sum[0] - sum[0] % 10) / 10)+48;
		si++;
	}	
	subji[si] = '\0';

	return change(subji);
}

void main()
{
	char  chengshu[MAX];
	char  beichengshu[MAX];
	char  * ji;
	cout << "请输入被乘数:";
	cin >> beichengshu;
	//beichengshu = "2664";
	cout << "请输入乘数:";
	cin >> chengshu;
	//chengshu = "4525";

	ji=sub(beichengshu,chengshu );
	cout << "积=:" << ji << endl;

	delete(ji);
	system("pause");
	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值