程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> poj2389-Bull Math(大整數乘法),poj2389-bullmath

poj2389-Bull Math(大整數乘法),poj2389-bullmath

編輯:C++入門知識

poj2389-Bull Math(大整數乘法),poj2389-bullmath


一,題意:
  大整數乘法模板題
二,思路:
  1,模擬乘法(注意"逢十進一")
  2,倒序輸出(注意首位0不輸出)
三,步驟:
  如:555 x 35 = 19425 
     5 5 5        5 5 5
     x   3 5        x    3 5
    -----------   ==>     ----------
      2 7 7 5       25 25 25
     + 1 6 6 5        +15 15 15
  -------------      -----------------
      1 9 4 2 5     15 40 40 25
            逢十進一
            ---------------
            1   9   4   2   5

1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 const int N = 10010; 5 char a[N],b[N]; 6 int ans[N]; //記錄結果的數組 7 int digit; //記錄結果的位數 8 9 //模擬乘法的過程 10 void MUL(int len , int len2){ 11 int l = 0 ; 12 for(int i = len2 - 1 ; i >= 0 ; i--){ 13 int k = l ; 14 int m = l ; 15 for(int j = len - 1 ; j >= 0 ; j--){ 16 ans[k++] = (b[i]-'0')*(a[j]-'0') + ans[m++]; //儲存的時候為倒序 17 } 18 l++; //乘完一位,往後移一位相加 19 digit=k; //記錄位數 20 } 21 //進行"逢十進一"操作 22 for(int i = 0 ; i<=digit ; i++){ 23 if(ans[i]>=10){ 24 ans[i+1] = ans[i+1] + ans[i] / 10 ; 25 ans[i] %=10 ; 26 } 27 } 28 } 29 30 //輸出操作 31 void print(){ 32 if(ans[digit]!=0) //判斷首位是否為0 33 cout<<ans[digit]; 34 for(int i = digit-1 ; i>=0 ; i-- ){ //倒序輸出 35 cout<<ans[i]; 36 } 37 cout<<endl; 38 } 39 40 int main(){ 41 while(cin>>a>>b){ 42 int len = strlen(a); 43 int len2 = strlen(b); 44 memset(ans,0,sizeof(ans));//初始化ans[]為0 45 MUL(len,len2); 46 print(); 47 } 48 return 0; 49 } View Code

版權聲明:本文為博主原創文章,未經博主允許不得轉載。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved