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

vector、string實現大數加法乘法

編輯:C++入門知識

理解 vector 是一個容器,是一個數據集,裡邊裝了很多個元素。與數組最大的不同是 vector 可以動態增長。

用 vector 實現大數運算的關鍵是,以 string 的方式讀入一個大數,然後將字串的每一個字符 s[i] 以 int 形式賦給 vector<int> a 中的每一個元素。然後將 a[i] 和 a[j] 加起來(或者乘起來)。每兩個元素加起來的結果 < 18,乘起來的結果 < 81。所以,其實用 short 型的 vector 就夠用了,short 范圍為 2^8-1,255。

用 string 實現大數加法的方法跟 vector 差不多,但是用 string 做大數乘法就有點麻煩,我寫了一會兒沒寫出來。

 

1. 用 vector 實現大數加法:

 #include <iostream>
 #include <vector>
 #include <>
 #include <cstdlib>
 
  
   
  bigSum(vector<> &a, vector<> &b, vector<> &           ( a.size() <          vector<> vectmp=         a=         b=      
     sum.assign(a.size(),       (i=a.size()-, j=b.size()-; i>=; --          (j>=              sum[i]=a[i]+             j--           sum[i]=      
      (k = sum.size() - ;   k >= ; --           (sum[k] >               sum[k]-=             (k!=) sum[k-]++              sum.insert(sum.begin(),     
            
     (cin>>x>>          vector<>         ( i=; i<x.length(); ++             a.push_back(x[i]-         ( i=; i<y.length(); ++             b.push_back(y[i]-         
          ( i=; i<c.size(); ++             cout<<         cout<<endl<<        }

運行:

 

 

2. string 實現大數加法:

 
 #include <iostream>
 #include <cstdlib>     
 #include <>    
 
    Sum( a,      (a.length()<           temp=a; a=b; b=           (i=a.length()-,j=b.length()-;i>=;i--,j--          a[i]=(a[i]+(j>=?b[j]-:         (a[i]>              a[i] -=             (i) a[i-]++              a=+                    freopen(,      
     (cin>>s1>>          cout<<<<s1<<endl<<<<s2<<         cout<<<<Sum(s1,s2)<<endl<<        }

運行:

 

 

3. vector 實現大數乘法:

輸入:n

輸出:2^(n+1)-1

該算法來自:

 #include <iostream>
 #include <vector>
 #include <>
   
  multiply( vector<> &a,  vector<> &b, vector<> & 
  main(           (cin >>          vector<> 
         a.push_back(         b.push_back( 
         (i = ; i <= n; ++              c.assign(a.size() + b.size() - ,               a =          
          (i = ; i < a.size() - ; ++             cout <<         cout << c[a.size() - ] -          cout <<         
  multiply( vector<> &a,  vector<> &b, vector<> &            
      (i = ; i < a.size(); ++          k =          (j = ; j < b.size(); ++             result[k++] += a[i] *  
      (k = result.size() - ;   k >= ; --           (result[k] >                (k !=   
                 result[k - ] += result[k] /                  result[k] %=                
                  tmp = result[k] /                  result[k] %=      }

運行:

 

 

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