C++大數乘法
阿新 • • 發佈:2020-12-21
#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");
}