zoukankan      html  css  js  c++  java
  • 高精度库

    其实可以优化读入函数的,但考虑到现在的数据多么坑是吧,就酱吧……万一不给你最后那个字符不就T了……

     1 #include<iostream>  
     2 #include<cstdio>  
     3 #include<cstdlib>  
     4 #include<cstring>  
     5 #include<string>   
     6 #include<algorithm>  
     7 using namespace std;
     8 const int MAXN=10010;
     9 struct bign{
    10     int len,s[MAXN];  
    11     bign(){memset(s,0,sizeof(s));len=1;}
    12     bign(int num){*this=num;}
    13     bign(const char *num){*this=num;}
    14     bign operator = (const int num){
    15         char s[MAXN];  sprintf(s,"%d",num);  
    16         *this = s;return *this;
    17     }
    18     bign operator = (const char *num){
    19         for(int i=0;num[i]=='0';num++);
    20         len=strlen(num);  
    21         for(int i=0;i<len;i++) s[i]=num[len-i-1]-'0';  
    22         return *this;
    23     }
    24     bign operator + (const bign &b) const{
    25         bign c;c.len=0;
    26         for(int i=0,g=0;g||i<max(len,b.len);i++)  {
    27             int x=g;
    28             if(i<len) x+=s[i];  
    29             if(i<b.len) x+=b.s[i];
    30             c.s[c.len++]=x%10;  
    31             g=x/10;
    32         } return c;  
    33     }
    34     void clean(){while(len > 1 && !s[len-1]) len--;return;}
    35     bign operator * (const bign &b){
    36         bign c;
    37         c.len=len+b.len;  
    38         for(int i=0;i<len;i++) for(int j=0;j<b.len;j++) c.s[i+j]+=s[i]*b.s[j];  
    39         for(int i=0;i<c.len;i++){
    40             c.s[i+1]+=c.s[i]/10;  
    41             c.s[i]%=10;
    42         } c.clean();return c;  
    43     }
    44     bign operator - (const bign &b){
    45         bign c;c.len=0;
    46         for(int i=0,g=0;i<len;i++){
    47             int x=s[i]-g;if(i<b.len) x-=b.s[i];  
    48             if(x>=0) g=0;  
    49             else g=1,x+=10;
    50             c.s[c.len++]=x;
    51         } c.clean();return c;  
    52     }
    53     bign operator / (const bign &b)  {
    54         bign c,f=0;
    55         for(int i=len-1;i>=0;i--){
    56             f=f*10;f.s[0]=s[i];
    57             while(!(f<b)) f=f-b,c.s[i]++;
    58         } c.len=len;c.clean();return c;  
    59     }
    60     bign operator % (const bign &b)  {
    61         bign r = *this / b;
    62         r = *this - r*b;
    63         return r;
    64     }
    65     bool operator < (const bign &b)  {
    66         if(len!=b.len) return len<b.len;  
    67         for(int i=len-1;i>=0;i--){
    68             if(s[i]!=b.s[i]) return s[i]<b.s[i];  
    69         } return false;
    70     }
    71     bool operator > (const bign &b){
    72         if(len!=b.len) return len>b.len;  
    73         for(int i=len-1;i>=0;i--){
    74             if(s[i]!=b.s[i]) return s[i]>b.s[i];  
    75         } return false;  
    76     }
    77     bool operator == (const bign &b){
    78         return !(*this>b)&&!(*this<b);  
    79     }
    80     void print(){
    81         for(int i=len-1;i>=0;i--) putchar(s[i]+'0');return;
    82     }
    83 };
    84 char s[MAXN];
    85 int main(){
    86     bign a,b,c;
    87     scanf("%s",s);a=s;
    88     scanf("%s",s);b=s;
    89     c=a/b;c.print();putchar('
    ');
    90     c=a%b;c.print();
    91     return 0;
    92 }
  • 相关阅读:
    解决“不是有效的win32应用程序”问题
    mysql 5.7 windows install
    Redis
    给 string 添加一个 GetInputStream 扩展方法
    定时任务为什么不用Timer
    怎样改动 VC6.0 4.0 2010 打印预览界面上的文字
    大数据时代的万象变化
    &lt;监听器模式&gt;在C++ 与 Java 之间实现的差异
    工厂模式之抽象工厂模式
    UIButton上字体的对齐方式
  • 原文地址:https://www.cnblogs.com/chxer/p/4461511.html
Copyright © 2011-2022 走看看