1. 程式人生 > >高精度模板 c++/類封裝

高精度模板 c++/類封裝

實還在POJ上面寫過一個浮點數的乘法和加法運算,但個別題目會用到,所以不加進去了.

  1. #include<iostream>
  2. #include<cstring>
  3. #include<string>
  4. #include<cstdio>
  5. usingnamespace std;  
  6. #define MAXN 1000
  7. struct HP  
  8. {  
  9.     int len,s[MAXN];  
  10.     HP()  
  11.     {  
  12.         memset(s,0,sizeof(s));  
  13.         len=1;  
  14.     }  
  15.     HP operator =(constchar *num) //字串賦值
  16.     {  
  17.         len=strlen(num);  
  18.         for(int i=0;i<len;i++) s[i]=num[len-i-1]-'0';  
  19.     }  
  20.     HP operator =(int num) //int 賦值
  21.     {  
  22.         char s[MAXN];  
  23.         sprintf(s,"%d",num);  
  24.         *this=s;  
  25.         return *this;  
  26.     }  
  27.     HP(int num) { *this=num;}  
  28.     HP(constchar*num) {*this=num;}  
  29.     string str()const//轉化成string
  30.     {  
  31.         string res="";  
  32.         for(int i=0;i<len;i++) res=(char)(s[i]+'0')+res;  
  33.         if(res=="") res="0";  
  34.         return res;  
  35.     }  
  36.     HP operator +(const HP& b) const
  37.     {  
  38.         HP c;  
  39.         c.len=0;  
  40.         for(int i=0,g=0;g||i<max(len,b.len);i++)  
  41.         {  
  42.         int x=g;  
  43.         if(i<len) x+=s[i];  
  44.         if(i<b.len) x+=b.s[i];  
  45.         c.s[c.len++]=x%10;  
  46.         g=x/10;  
  47.         }  
  48.         return c;  
  49.     }  
  50.     void clean()  
  51.     {  
  52.         while(len > 1 && !s[len-1]) len--;  
  53.     }  
  54.     HP operator *(const HP& b)  
  55.     {  
  56.         HP c;  
  57.         c.len=len+b.len;  
  58.         for(int i=0;i<len;i++)  
  59.         for(int j=0;j<b.len;j++)  
  60.             c.s[i+j]+=s[i]*b.s[j];  
  61.         for(int i=0;i<c.len-1;i++)  
  62.         {  
  63.         c.s[i+1]+=c.s[i]/10;  
  64.         c.s[i]%=10;  
  65.         }  
  66.         c.clean();  
  67.         return c;  
  68.     }  
  69.     HP operator - (const HP& b)  
  70.     {  
  71.         HP c;  
  72.         c.len = 0;  
  73.         for(int i=0,g=0;i<len;i++)  
  74.         {  
  75.         int x=s[i]-g;  
  76.         if(i<b.len) x-=b.s[i];  
  77.         if(x>=0)  
  78.             g=0;  
  79.         else
  80.         {  
  81.             g=1;  
  82.             x+=10;  
  83.         }  
  84.         c.s[c.len++]=x;  
  85.         }  
  86.         c.clean();  
  87.         return c;  
  88.     }  
  89.     HP operator / (const HP &b)  
  90.     {  
  91.         HP c, f = 0;  
  92.         for(int i = len-1; i >= 0; i--)  
  93.         {  
  94.             f = f*10;  
  95.             f.s[0] = s[i];  
  96.             while(f>=b)  
  97.             {  
  98.                 f =f-b;  
  99.                 c.s[i]++;  
  100.             }  
  101.         }  
  102.         c.len = len;  
  103.         c.clean();  
  104.         return c;  
  105.     }  
  106.      HP operator % (const HP &b)  
  107.     {  
  108.         HP r = *this / b;  
  109.         r = *this - r*b;  
  110.         return r;  
  111.     }  
  112.      HP operator /= (const HP &b)  
  113.     {  
  114.         *this  = *this / b;  
  115.         return *this;  
  116.     }  
  117.     HP operator %= (const HP &b)  
  118.     {  
  119.         *this = *this % b;  
  120.         return *this;  
  121.     }  
  122.     bool

    相關推薦

    精度模板 c++/封裝

    實還在POJ上面寫過一個浮點數的乘法和加法運算,但個別題目會用到,所以不加進去了. #include<iostream> #include<cstring> #include<string> #include

    精度大數c++模板 很好用

    details lean 代碼 sprintf printf span tdi 我只 tar 首先聲明這是大佬寫的,我只是記錄下,拿來學習。附上大佬的鏈接 : https://blog.csdn.net/code4101/article/details/2302052

    bignC++精度模板

    很不錯的高精度模板,但這個模板只能算加、減、乘、除等基本運算,但操作減法的時候只能大數減小數,所以最重要的操作是 + 、 +=、*、*=、、/、/=、-=、==,>=,這些基本的運算,最近通過在UVA在刷的幾道題,發現自己以前的模板存在一些BUG,現在貼上已經改正的模

    C++精度模板

           依據紫書第5章,我用新的方法實現一個高精度類。模板通過了自己用python進行的對拍,還有UVa的5道高精度題。由於類名不同,閒麻煩的可以加一句“typedef BigInteger bign”,就能用舊版高精度博文裡的main函式程式碼直接AC。不過UVa7

    C++ 完全精度模板 (hdu 4762)

    Cut the Cake Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 821    Accepted S

    精度模板Bigint Killer

    add -- return -i algo sizeof 高精度 bsp while 1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 usi

    真·純手擼精度模板

    其他 內容 == swap esp 精度 har 我不 return 耗時(50分鐘)不壓位 內容只有高精度+-*,因為其他我不會寫QAQ~ 均ACluogu,codevs #include<bits/stdc++.h> using namespac

    精度模板

    style 技術分享 blog 目前 one stream std 。。 return 好,這就是naive的高精度模板。目前只有加法。 http://www.mamicode.com/info-detail-454902.html 可以參考這個。 1 #includ

    精度模板(從洛谷題解中騙來的

    fine truct one sizeof pri PE sin sync main 乘法通用模板: #include <iostream> #include <cstdio> #include <algorithm> #

    精度模板(From JCVB)

    swa eof its arr mat empty print con gcd 1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 #includ

    【重載運算符+壓位】精度模板

    cor font 比較 返回 重載 algorithm == 轉換 一個 昨天做一道DP的題(矩陣取數遊戲),本來是很簡單的,但是要用高精度,又不想用__int128水過去(誰讓NOIP不讓),於是自己打了一個小時,最後掛了。。。 於是本蒟蒻痛定思痛,感覺高精度還是重載運

    精度模板(不定時更新)

    void 支持 rev == memset spa -s -- code 以前寫高精度基本都是抄別人的……這次要改變一下了…… 現在的高精度模板還是很簡陋的,只支持高精加,減,乘,高精除低精,高精模低精,高精快速冪,高精比較大小,沒了。 或許以後會不定期更新一下……畢竟這個

    NOIP複賽複習(四)讀寫外掛與精度模板

    讀入輸出掛 讀入輸出掛就是逐個字元地讀入資料,從而讓讀入更加快速。輸出掛的原理也是一樣的,都是通過將輸出數字變成輸出字元以加快速度。當然輸入輸出外掛一般用在大量輸入輸出的情況下,這樣價效比才高一些,否則得不償失。 void Rd(int &res){  &nbs

    XDOJ 1046 - 精度模板綜合測試 - [精度模板]

     題目連結:http://acm.xidian.edu.cn/problem.php?id=1046 題目描述 請輸出兩個數的和,差,積,商,取餘。注意不要有前導零。 輸入 多組資料,每組資料是兩個整數A,B(0<=A<=10^100,0<B<=10^100). 輸

    精度模板.

    #include <iostream> #include <string> #include <cstring> #include <cstdio> using namespace std; const int maxn = 1000;

    [note]精度模板

    turn lan wap void ret 模板 continue for oid 高精度模板 先定義一個struct struct gj{ int l,s[N]; bool fh; void Print(){ if(fh)putch

    精度 模板

    高精度加法 #include<iostream> #include<cstdio> #include<cstring> using namespace std; const int __=1000100; char a1[__],b1[__];

    精度加法--C++

    高精度加法–C++ 仿照豎式加法,在第一步計算的時候將進位保留,第一步計算完再處理進位。(見程式碼註釋) 和乘法是類似的。 #include <iostream> #include <

    牛客No.5 B-div[精度模板和pell]

    題意:根據題意轉換能得到一個公式,是pell模型 佩爾方程: 形如x2-D*y2=1(D是一個固定的正整數且D不是完全平方數)的方程稱為佩爾方程 佩爾方程定理: 佩爾方程總有正整數解,若(x1,y1)是使x1最小的解,則每個解(xk,yk)都可以通過取冪得到:

    精度模板 WUSToj2238

    2238: Virus outbreak Time Limit: 1 Sec  Memory Limit: 128 MB    Description         The State