#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");
}
C++大数乘法
最新推荐文章于 2024-01-28 14:31:58 发布