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


阶乘精确值


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. Jedis操作redis(转)

    package org.jzkangta.jedis; import java.util.ArrayList; import java.util.HashMap; import java.util.I ...

  2. AIDL机制实现进程间的通讯实例

    转载自:http://blog.csdn.net/cjjky/article/details/7562652 ======================================= 在Andr ...

  3. HDU 1532 Drainage Ditches

    网络最大流模版题,用了(Ford-Fulkerson算法)  代码不贴了,模版见我博客 http://www.cnblogs.com/zufezzt/p/4585752.html  

  4. 友元(友元函数、友元类和友元成员函数) C++

    有些情况下,允许特定的非成员函数访问一个类的私有成员,同时仍阻止一般的访问,这是很方便做到的.例如被重载的操作符,如输入或输出操作符,经常需要访问类的私有数据成员. 友元(frend)机制允许一个类将 ...

  5. [JS思路]运动框架思路

    匀速运动的思路一: 1.先清除动画,再加载动画 2.方向dir有正值和负值,可以通过 目标值 > 当前值  往右移动,即正数 目标值 < 当前值  往右移动,即负数 来进行判断:dir = ...

  6. 获取radio的值

    随着Jquery的作用越来越大,使用的朋友也越来越多.在Web中,由于CheckBox.Radiobutton .DropDownList等控件使用的频率比较高,就关系到这些控件在Jquery中的操作 ...

  7. mysql 取出的日期数据缺少时分秒

    项目使用的数据库是mysql  持久层框架是hibernate  利用SQLQuery 获取日期的时候缺少时分秒   将 .addScalar("dealTS",StandardB ...

  8. Docker技术学习

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://sofar.blog.51cto.com/353572/1598249 貌似Doc ...

  9. docker的一些命令

    转自:http://blog.csdn.net/wsscy2004/article/details/25878363 查看容器的root用户密码 docker logs <容器名orID> ...

  10. OC类的本质及分类

    (一)类的本质 类对象(class object)与实例对象(instance object) 类本身也是一个对象,是class类型的对象,简称“类对象”. 在/usr/include/objc/ob ...