码迷,mamicode.com
首页 > 其他好文 > 详细

高精度

时间:2014-11-19 07:06:29      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:io   ar   os   sp   for   on   cti   amp   ef   

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <ctime>
#include <cctype>
#include <cmath>
#include <string>
#include <cstring>
#include <stack>
#include <queue>
#include <list>
#include <vector>
#include <map>
#include <set>
 
#define sqr(x) ((x)*(x))
#define LL long long
#define INF 0x3f3f3f3f
#define PI acos(-1.0)
#define eps 1e-10
#define maxn 1500
 
using namespace std;struct bign{
  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);
    for(int i = 0; i < len; i++) s[i] = num[len-i-1] - ‘0‘;
    return *this;
  }
 
  string str() const {
    string res = "";
    for(int 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;
    for(int 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;
    for(int i = 0; i < len; i++)
      for(int j = 0; j < b.len; j++)
        c.s[i+j] += s[i] * b.s[j];
    for(int 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;
    for(int 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;
    for(int 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;
}
bign com[101][101];
int main()
{
    // freopen("G:/1.txt","w",stdout);
  com[1][1]=1;
  com[1][0]=1;
  for (int i=2;i<=100;i++)
  {
    com[i][0]=1;
    for (int j=1;j<=i;j++)
        com[i][j]=com[i-1][j-1]+com[i-1][j];
  }
  bign ans[105];
  ans[2]=1;
  ans[3]=4;
  for (int i=4;i<=100;i++)
  {
    ans[i]=1;
    for (int j=1;j<=i*(i-1)/2;j++)
        ans[i]=ans[i]*2;
    ans[i]=ans[i]-1;
    for (int j=2;j<=i-1;j++)
        ans[i]=ans[i]-(ans[j]*com[i][j]);
  }
  int n;
  while (~scanf("%d",&n))
  // for (int n=2;n<=100;n++
  {
    cout<<ans[n]<<endl;
  }
  return 0;
}

高精度

标签:io   ar   os   sp   for   on   cti   amp   ef   

原文地址:http://www.cnblogs.com/a972290869/p/4107016.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!