20200817
終於思考完畢,現在將程式碼寫下
現在為了讓其程式碼有其應用性,讓程式碼讀取config.txt,將程式結果寫入result.txt
程式碼如下:
檔名:config.txt
內容:
#第一個大整數位數(請不要超過100位數。若要超過,請修改原始碼)
9
#第一個大整數(987654321)
9 8 7 6 5 4 3 2 1
#第二個大整數位數(請不要超過100位數。若要超過,請修改原始碼)
11
#第二個大整數(97325678901)
9 7 3 2 5 6 7 8 9 0 1
檔名:BigNumMulti.cpp
內容:
#include <math.h>
#include <iostream>
#include <fstream>
using namespace std;
#define SIZE 100
int main() {
char BigNum1Mark[SIZE];
char BigNum1SizeMark[SIZE];
int num1size=0;
int num1[SIZE]={0};
char BigNum2Mark[SIZE];
char BigNum2SizeMark[SIZE];
int num2size=0;
int num2[SIZE]={0};
int num3size=0;
int num3[SIZE+SIZE] = {0};
//int i,j,k,ki,kj,kk,temp;
int i,j,k,temp;
/*讀取設定檔config.txt,並將設定寫入變數*/
ifstream fin("config.txt");
ofstream fout("result.txt");
if(!fin) {
cout << "無法讀入檔案\n";
fout << "無法讀入檔案\n";
return 1;
}
fin >> BigNum1SizeMark;
fout << BigNum1SizeMark <<"\n";
fin >> num1size;
fout <<num1size<<"\n";
if (num1size>=SIZE) {
cout << "Error,the Size >= 100.Please fix the source code!!";
fout << "Error,the Size >= 100.Please fix the source code!!"<<"\n";
}
fin >> BigNum1Mark;
fout << BigNum1Mark<<"\n";
for(i=num1size-1;i>=0;i--) {
fin >> num1[i];
fout << num1[i];
}
fout <<"\n";
fin >> BigNum2SizeMark;
fout << BigNum2SizeMark<<"\n";
fin >> num2size;
fout << num2size<<"\n";
if (num2size>=SIZE) {
cout << "Error,the Size >= 100.Please fix the source code!!";
fout << "Error,the Size >= 100.Please fix the source code!!"<<"\n";
}
fin >> BigNum2Mark;
fout << BigNum2Mark<<"\n";
for(j=num2size-1;j>=0;j--) {
fin >> num2[j];
fout << num2[j];
}
fout <<"\n";
fin.close();
num3size=num2size+num1size;
fout << "#兩個大整數相乘之後,所得的大整數之位數"<<"\n";
fout << num3size<<"\n";
for(i=0;i<num1size;i++) {
for (j=0;j<num2size;j++) {
num3[i+j] = num3[i+j]+num1[i]*num2[j];
if (num3[i+j]>=10) {
temp = num3[i+j];
num3[i+j] = temp%10;
num3[i+j+1] = num3[i+j+1]+(temp/10)%10;
}
}
}
fout << "#兩個大整數相乘之後,所得的大整數"<<"\n";
for(k=num3size-1;k>=0;k--) {
fout <<num3[k];
}
fout <<"\n";
fout.close();
return 0;
}
最後產生的結果
檔案:result.txt
內容:
#第一個大整數位數(請不要超過100位數。若要超過,請修改原始碼)
9
#第一個大整數(987654321)
987654321
#第二個大整數位數(請不要超過100位數。若要超過,請修改原始碼)
11
#第二個大整數(97325678901)
97325678901
#兩個大整數相乘之後,所得的大整數之位數
20
#兩個大整數相乘之後,所得的大整數
96124127310831181221
下面程式碼只處理[大整數乘法問題]
#include <math.h>
#include <iostream>
using namespace std;
#define SIZE 100
int main() {
int num1[SIZE]={9,8,7,6,5,4,3,2,1};
//num1 is 123456789
int num2[SIZE]={9,7,3,2,5,6,7,8,9,0,1};
//num2 is 10987652379
int num3[SIZE+SIZE] = {0};
int i,j,k,temp;
for(i=0;i<SIZE;i++) {
for (j=0;j<SIZE;j++) {
num3[i+j] = num3[i+j]+num1[i]*num2[j];
if (num3[i+j]>=10) {
temp = num3[i+j];
num3[i+j] = temp%10;
num3[i+j+1] = num3[i+j+1]+(temp/10)%10;
}
//cout <<"num3["<<i+j<<"]="<<num3[i+j]<<" ";
}
//cout <<"\n";
}
for(k=SIZE+SIZE-1;k>=0;k--) {
cout <<num3[k] <<" ";
}
}
以下是思考過程:
20200706
終於提起筆來寫這道題。首先先思考 1 位數x 1 位數
接下來,我們把這些思考寫成程式碼如下:
#include <math.h>
#include <iostream>
using namespace std;
int main() {
int num1[1]={7};
int num2[1]={9};
int num3[2];
num3[0] = num1[0]*num2[0]%10;
num3[1] = (num1[0]*num2[0]/10)%10;
cout << num3[1]<<num3[0]<<"\n";
return 0;
}
接下來,思考 2 位數x 1 位數
#include <math.h>
#include <iostream>
using namespace std;
int main() {
int num1[2]={7,5};
int num2[1]={9};
int num3[3];
int temp01,temp02;
num3[0] = num1[0]*num2[0]%10;
num3[1] = (num1[0]*num2[0]/10)%10+(num1[1]*num2[0]%10);
num3[2] = (num1[1]*num2[0]/10)%10;
//處理中間位數進位問題
if (num3[1]>=10) {
temp01 = num3[1]%10;
temp02 = (num3[1]/10)%10;
num3[1] = temp01;
num3[2] = num3[2]+temp02;
}
cout << num3[2]<< num3[1]<<num3[0]<<"\n";
return 0;
}
#include <math.h>
#include <iostream>
using namespace std;
int main() {
int num1[2]={7,5};
int num2[2]={9,3};
int num3[4];
int temp01[2],temp02[2];
num3[0] = num1[0]*num2[0]%10;
num3[1] = (num1[0]*num2[0]/10)%10+(num1[1]*num2[0]%10)+(num1[0]*num2[1]%10);
num3[2] = (num1[1]*num2[0]/10)%10+(num1[0]*num2[1]/10)%10+num1[1]*num2[1]%10;
num3[3] = (num1[1]*num2[1]/10)%10;
//處理中間位數進位問題
if (num3[1]>=10) {
temp01[0] = num3[1]%10;
temp02[0] = (num3[1]/10)%10;
num3[1] = temp01[0];
num3[2] = num3[2]+temp02[0];
}
if (num3[2]>=10) {
temp01[1] = num3[2]%10;
temp02[1] = (num3[2]/10)%10;
num3[2] = temp01[1];
num3[3] = num3[3]+temp02[1];
}
cout << num3[3]<< num3[2]<< num3[1]<<num3[0]<<"\n";
return 0;
}
資料來源:
沒有留言:
張貼留言