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


阶乘精确值


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"\n");
       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;
}
  

[code]高精度运算的更多相关文章

  1. 高精度运算专题3-乘法运算(The multiplication operation)

    这个专题呢,我就来讲讲高精度的乘法,下面是三个计算乘法的函数,第一个函数是char类型的,要对字符串进行数字转换,而第二个是两个int类型的数组,不用转换成数字,第三个则更为优化,用a数组-b数组放回 ...

  2. 系统的讲解 - PHP 浮点数高精度运算

    目录 概述 浮点数运算的"锅" 任意精度数学函数 常用数值处理方案 扩展 小结 概述 记录下,工作中遇到的坑 ... 关于 PHP 浮点数运算,特别是金融行业.电子商务订单管理.数 ...

  3. #C++初学记录(高精度运算)(加法)

    高精度运算 不管是int还是double亦或者long long ,这些定义变量都有数据范围的一定限制,在计算位数超过十几位的数,也就是超过他们自身的数据范围时,不能采用现有类型进行计算,只能自己通过 ...

  4. ICPC Asia Nanning 2017 F. The Chosen One (高精度运算)

    题目链接:The Chosen One 比赛链接:ICPC Asia Nanning 2017 题意 \(t\) 组样例,每组给出一个整数 \(n(2\le n\le 10^{50})\),求不大于 ...

  5. 算法模板 - C++ 高精度运算

    C++算法板子 高精度 高精度推荐用python来写,python有大整数,这里写的是关于C++的高精度运算模板 1.高精 * 低精 #include <iostream> #includ ...

  6. Digital Root - SGU 118(高精度运算)

    题目大意:有K组测试数据,然后每组有N个正整数,A1,A2,A3.....An,求出 A1 + A1*A2 + A1*A2*A3 + .......A1*A2*...An 的数根. 分析:有个对9取余 ...

  7. Censored! - POJ 1625(ac自动机+简单dp+高精度运算)

    题目大意:首先给一个字符集合,这个集合有N个字符,然后需要一个长度为M的句子,但是据子里面不能包含的串有P个,每个串里面的字符都是有字符集和里面的字符构成的,现在想知道最多能构造多少个不重复的句子. ...

  8. 1001. Exponentiation高精度运算总结

    解题思路 这道题属于高精度乘法运算,要求输入一个实数R一个指数N,求实数R的N次方,由于R有5个数位,而N又特别大,因此用C++自带的数据类型放不下. 解题思路是通过数组储存每次乘积结果和底数的每一位 ...

  9. poj 1503 Integer Inquiry (高精度运算)

    题目链接:http://poj.org/problem?id=1503 思路分析: 基本的高精度问题,使用字符数组存储然后处理即可. 代码如下: #include <iostream> # ...

随机推荐

  1. Sublime Text 3中配置运行Java

    1.安装JDK并配置环境变量 2.在JDK的bin目录下新建runJava.bat文件,右键选编辑,复制粘贴如下代码并保存: @echo off cd %~dp1 echo Compiling %~n ...

  2. 为什么要lock,lock了什么?

    当我们使用线程的时候,效率最高的方式当然是异步,即各个线程同时运行,其间不相互依赖和等待.但当不同的线程都需要访问某个资源的时候,就需要同步机制了,也就是说当对同一个资源进行读写的时候,我们要使该资源 ...

  3. github的使用与问题

    GIT密钥的生成步骤 一 .设置Git的user name和email: $ git config --global user.name "name" $ git config - ...

  4. Linux关闭selinux

    最近在折腾Linux服务器,配置环境时,安装php的一个拓展,明明编译成功了,就是加载不进去,phpinfo不显示,查看错误日志是显示加载失败,没权限==,配置ftp程序也会有意想不到的问题,搞了好久 ...

  5. Vanya and Field

    Vanya and Field 题目链接:http://www.codeforces.com/problemset/problem/492/E 逆元 刚看到这题的时候一脸懵逼不知道从哪下手好,于是打表 ...

  6. 用setTimeout实现与setInteval类似的功能

    用setTimeout实现与setInteval类似的功能,代码如下: (function(){ var self = arguments.callee; //获取函数本身 count++; if ( ...

  7. mysql表设计---时间类型

    mysql 时间格式的区别 datetime 日期 +时间timestamp 时间戳 格式都是一样YYYY-MM-DD HH:MM:SS int(12)型存储php的time()时间戳,格式10位14 ...

  8. sql新建数据库表,及添加多个主键

    create table tb_Modules(module_Id int identity(1,1) primary key,  (自增)model_Name varchar(50) not nul ...

  9. Zeppelin添加mysql解释器

    安装Apache zeppelin 1 wget http://apache.fayea.com/zeppelin/zeppelin-0.6.2/zeppelin-0.6.2-bin-all.tgz ...

  10. webapi中常用attribute标签

    HTTP Methods Instead of using the naming convention for HTTP methods, you can explicitly specify the ...