zoukankan      html  css  js  c++  java
  • hdu 1042 N!

    题目连接

    http://acm.hdu.edu.cn/showproblem.php?pid=1042

    N!

    Description

    Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N!

    Input

    One N in one line, process to the end of file.

    Output

    For each N, output N! in one line.

    Sample Input

    1
    2
    3

    Sample Output

    1
    2
    6

    用斯特林公式$egin{align}large{}n! approx large{}sqrt{2 pi n}({frac{n}{e}})^nend{align}$估计一下阶乘位数,

    其余没啥说的,测模板。。

      1 #include<algorithm>
      2 #include<iostream>
      3 #include<istream>
      4 #include<ostream>
      5 #include<cstdlib>
      6 #include<cstring>
      7 #include<cassert>
      8 #include<cstdio>
      9 #include<string>
     10 using std::max;
     11 using std::cin;
     12 using std::cout;
     13 using std::endl;
     14 using std::swap;
     15 using std::string;
     16 using std::istream;
     17 using std::ostream;
     18 struct BigN {
     19     typedef unsigned long long ull;
     20     static const int Max_N = 36000;
     21     int len, data[Max_N];
     22     BigN() { memset(data, 0, sizeof(data)), len = 0; }
     23     BigN(const int num) {
     24         memset(data, 0, sizeof(data));
     25         *this = num;
     26     }
     27     BigN(const char *num) {
     28         memset(data, 0, sizeof(data));
     29         *this = num;
     30     }
     31     void cls() { len = 0, memset(data, 0, sizeof(data)); }
     32     BigN& clean(){ while (len > 1 && !data[len - 1]) len--;  return *this; }
     33     string str() const {
     34         string res = "";
     35         for (int i = len - 1; ~i; i--) res += (char)(data[i] + '0');
     36         if (res == "") res = "0";
     37         res.reserve();
     38         return res;
     39     }
     40     BigN operator = (const int num) {
     41         int j = 0, i = num;
     42         do data[j++] = i % 10; while (i /= 10);
     43         len = j;
     44         return *this;
     45     }
     46     BigN operator = (const char *num) {
     47         len = strlen(num);
     48         for (int i = 0; i < len; i++) data[i] = num[len - i - 1] - '0';
     49         return *this;
     50     }
     51     BigN operator + (const BigN &x) const {
     52         BigN res;
     53         int n = max(len, x.len) + 1;
     54         for (int i = 0, g = 0; i < n; i++) {
     55             int c = data[i] + x.data[i] + g;
     56             res.data[res.len++] = c % 10;
     57             g = c / 10;
     58         }
     59         while (!res.data[res.len - 1]) res.len--;
     60         return res;
     61     }
     62     BigN operator * (const BigN &x) const {
     63         BigN res;
     64         int n = x.len;
     65         res.len = n + len;
     66         for (int i = 0; i < len; i++) {
     67             for (int j = 0, g = 0; j < n; j++) {
     68                 res.data[i + j] += data[i] * x.data[j];
     69             }
     70         }
     71         for (int i = 0; i < res.len - 1; i++) {
     72             res.data[i + 1] += res.data[i] / 10;
     73             res.data[i] %= 10;
     74         }
     75         return res.clean();
     76     }
     77     BigN operator * (const int num) const {
     78         BigN res;
     79         res.len = len + 1;
     80         for (int i = 0, g = 0; i < len; i++) res.data[i] *= num;
     81         for (int i = 0; i < res.len - 1; i++) {
     82             res.data[i + 1] += res.data[i] / 10;
     83             res.data[i] %= 10;
     84         }
     85         return res.clean();
     86     }
     87     BigN operator - (const BigN &x) const {
     88         assert(x <= *this);
     89         BigN res;
     90         for (int i = 0, g = 0; i < len; i++) {
     91             int c = data[i] - g;
     92             if (i < x.len) c -= x.data[i];
     93             if (c >= 0) g = 0;
     94             else g = 1, c += 10;
     95             res.data[res.len++] = c;
     96         }
     97         return res.clean();
     98     }
     99     BigN operator / (const BigN &x) const {
    100         return *this;
    101     }
    102     BigN operator += (const BigN &x) { return *this = *this + x; }
    103     BigN operator *= (const BigN &x) { return *this = *this * x; }
    104     BigN operator -= (const BigN &x) { return *this = *this - x; }
    105     BigN operator /= (const BigN &x) { return *this = *this / x; }
    106     bool operator <  (const BigN &x) const {
    107         if (len != x.len) return len < x.len;
    108         for (int i = len - 1; ~i; i--) {
    109             if (data[i] != x.data[i]) return data[i] < x.data[i];
    110         }
    111         return false;
    112     }
    113     bool operator >(const BigN &x) const { return x < *this; }
    114     bool operator<=(const BigN &x) const { return !(x < *this); }
    115     bool operator>=(const BigN &x) const { return !(*this < x); }
    116     bool operator!=(const BigN &x) const { return x < *this || *this < x; }
    117     bool operator==(const BigN &x) const { return !(x < *this) && !(x > *this); }
    118 };
    119 istream& operator >> (istream &in, BigN &x) {
    120     string src;
    121     in >> src;
    122     x = src.c_str();
    123     return in;
    124 }
    125 ostream& operator << (ostream &out, const BigN &x) {
    126     out << x.str();
    127     return out;
    128 }
    129 int main() {
    130 #ifdef LOCAL
    131     freopen("in.txt", "r", stdin);
    132     freopen("out.txt", "w+", stdout);
    133 #endif
    134     int n;
    135     while (~scanf("%d", &n)) {
    136         BigN res = 1;
    137         if (0 == n || 1 == n) {
    138             puts("1");
    139             continue;
    140         }
    141         for (int i = 1; i <= n; i++) res *= i;
    142         cout << res << endl;
    143     }
    144     return 0;
    145 }
    View Code
    By: GadyPu 博客地址:http://www.cnblogs.com/GadyPu/ 转载请说明
  • 相关阅读:
    mybatis中#{}和${}的区别 (二)
    JAVA分布式架构的演变及解决方案
    mybatis中的#和$的区别
    https
    vue3的组件v-model初探1
    前端性能优化
    HTTP请求的完全过程
    http缓存详解,http缓存推荐方案
    vscode-setting备份
    Mac电脑在finder中添加- 右键打开vscode
  • 原文地址:https://www.cnblogs.com/GadyPu/p/4541981.html
Copyright © 2011-2022 走看看