1. 程式人生 > 其它 >C++大數乘法

C++大數乘法

技術標籤:c++其他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"); }