zoukankan      html  css  js  c++  java
  • [code]高精度运算

    数组存储整数,模拟手算进行四则运算

    阶乘精确值


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    #include<stdio.h>
    #include<string.h>
    const int maxn=3000;
    int f[maxn];
    int main()
    {
            int i,j,n;
           scanf"%d",&n);
           memset(f,0, sizeof(f));//清?零??f数?y组???
           f[0]=1;
            for(i=2;i<=n;i++)
           //乘?以??i
                   int c=0;
                   for(j=0;j<maxn;j++)
                  {
                          int s=f[j]*i+c;
                         f[j]=s%10;
                         c=s/10;
                  }
           }
            for(j=maxn-1;j>=0;j--)if (f[j])break;
            for(i=j;i>=0;i--)printf("%d" ,f[i]);
           printf" ");
           scanf"%d",&n);
            return 0;
    }

    高精度运算类bign
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    #include<cstdio>
    #include<iostream>
    #include <string>
    using namespace std;
    const int maxn = 200;
    class bign{
    public:
      int len, s[maxn];
     
      bign() {
        memset(s, 0, sizeof(s));
        len = 1;
      }
     
      bign(int num) {
        *this = num;
      }
     
      bign(const char* num) {
        *this = num;
      }
     
      bign operator = ( int num) {
        char s[maxn];
        sprintf(s, "%d", num);
        *this = s;
        return this;
      }
     
      bign operator = ( const char * num) {
        len = strlen(num);
        forint i = 0; i < len; i++) s[i] = num[len-i-1] - '0';
        return this;
      }
     
      string str() const {
        string res = "";
        forint i = 0; i < len; i++) res = (char )(s[i] + '0')+res;
        if(res == "") res = "0" ;
        return res;
      }
     
      bign operator + ( const bign& b) const {
        bign c;
        c.len = 0;
        forint i = 0, g = 0; g || i < max(len, b.len); i++) {
          int x = g;
          if(i < len) x += s[i];
          if(i < b.len) x += b.s[i];
          c.s[c.len++] = x % 10;
          g = x / 10;
        }
        return c;
      }
     
      void clean() {
        while(len > 1 && !s[len-1]) len--;
      }
     
      bign operator * ( const bign& b) {
        bign c; c.len = len + b.len;
        forint i = 0; i < len; i++)
          for(int j = 0; j < b.len; j++)
            c.s[i+j] += s[i] * b.s[j];
        forint i = 0; i < c.len-1; i++){
          c.s[i+1] += c.s[i] / 10;
          c.s[i] %= 10;
        }
        c.clean();
        return c;
      }
     
      bign operator - ( const bign& b) {
        bign c; c.len = 0;
        forint i = 0, g = 0; i < len; i++) {
          int x = s[i] - g;
          if(i < b.len) x -= b.s[i];
          if(x >= 0) g = 0;
          else {
            g = 1;
            x += 10;
          }
          c.s[c.len++] = x;
        }
        c.clean();
        return c;
      }
     
      bool operator < (const bign& b) const{
        if(len != b.len) return len < b.len;
        forint i = len-1; i >= 0; i--)
          if(s[i] != b.s[i]) return s[i] < b.s[i];
        return false;
      }
     
      bool operator > (const bign& b) const{
        return b < * this;
      }
     
      bool operator <= (const bign& b) {
        return !(b > * this);
      }
     
      bool operator == (const bign& b) {
        return !(b < * this) && !(*this < b);
      }
     
      bign operator += ( const bign& b) {
        *this = * this + b;
        return this;
      }
     
      
    };
     
    istream& operator >> (istream &in, bign& x) {
           string s;
           in >> s;
           x = s.c_str();
            return in;
    }
     
    ostream& operator << (ostream &out, const bign& x) {
           out << x.str();
            return out;
    }
     
     
    int main() {
      bign a;
      cin >> a;
      a += "123456789123456789000000000";
      cout << a*2 << endl;
      return 0;
    }
      

  • 相关阅读:
    Centos7.3防火墙配置
    Centos7使用yum安装MySQL5.6的正确姿势
    Connect C# to MySQL
    ADO.NET操作MySQL数据库
    Mac OS 上 VIM 8.0 安装体验
    WebSocket实战之————Workerman服务器的安装启动
    C语言实现文件复制功能(包括文本文件和二进制文件)
    Gateway/Worker模型 数据库使用示例
    [转]Using the Group Pane to Repeat Page Titles
    [转]学习 WCF (6)--学习调用WCF服务的各种方法
  • 原文地址:https://www.cnblogs.com/zhxshseu/p/5285202.html
Copyright © 2011-2022 走看看