题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1042

题目大意:求n!, n 的上限是10000。

解题思路:高精度乘法 , 因为数据量比较大, 所以得用到缩进,但因为是乘法,缩进只能在10^5, 不然在乘的过程中就超过int型。然后数值位数大概在8000位以下。

#include <iostream>
#include <string.h>
using namespace std; const int MAXN = 100000;
const int N = 8000; struct bign {
int len;
int s[N]; bign() {
this -> len = 1;
memset(s, 0, sizeof(s));
}
bign (int number) {*this = number;}
bign (const char* number) {*this = number;} bign change(bign cur) {
bign now;
now = cur;
for (int i = 0; i < cur.len; i++)
now.s[i] = cur.s[cur.len - i - 1];
return now;
} void delZore() { // 删除前导0.
bign now = change(*this);
while (now.s[now.len - 1] == 0 && now.len > 1) {
now.len--;
}
*this = change(now);
} void put() { // 输出数值。
delZore();
printf("%d", s[0]);
for (int i = 1; i < len; i++)
printf("%05d", s[i]);
} bign operator = (const char *number) {
memset(s, 0, sizeof(s));
int dist = strlen(number);
int k = dist % 8;
for (int i = 0; i < k; i++)
s[0] = s[0] * 10 + number[i] - '0';
int cnt = 0;
for (int i = k; i < dist; i++, cnt++)
s[cnt / 8 + 1] = s[cnt / 8 + 1] * 10 + number[i] - '0';
len = cnt / 8 + 1;
return *this;
} bign operator = (int number) {
char string[N];
sprintf(string, "%d", number);
*this = string;
return *this;
} bign operator * (const bign &cur){
bign sum, a, b;
sum.len = 0;
a = a.change(*this);
b = b.change(cur); for (int i = 0; i < a.len; i++){
int g = 0; for (int j = 0; j < b.len; j++){
int x = a.s[i] * b.s[j] + g + sum.s[i + j];
sum.s[i + j] = x % MAXN;
g = x / MAXN;
}
sum.len = i + b.len; while (g){
sum.s[sum.len++] = g % MAXN;
g = g / MAXN;
}
}
return sum.change(sum);
}
}; int main() {
int n;
while (scanf("%d", &n) == 1) {
bign sum = 1;
for (int i = 2; i <= n; i++) {
bign now = i;
sum = sum * now;
}
sum.put();
printf("\n");
}
return 0;
}

hdu 1042 N!(高精度乘法 + 缩进)的更多相关文章

  1. hdu 1042 N!(高精度乘法)

    Problem Description Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N!   Input One N in ...

  2. hdu 1042 N! 高精度运算

    N!                                                                              Time Limit: 10000/50 ...

  3. Hdu 1042 N! (高精度数)

    Problem Description Givenan integer N(0 ≤ N ≤ 10000), your task is to calculate N! Input OneN in one ...

  4. HDU 1042.N!【高精度乘法】【8月24】

    N! Problem Description Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N!   Input One N ...

  5. HDU 1042 N!( 高精度乘法水 )

    链接:传送门 思路:高精度乘法板子题,高精度耗时又耗空间...... /**************************************************************** ...

  6. [vijos P1040] 高精度乘法

    如果这次noip没考好,完全是因为从7月29日之后就没有再写过程序了.说起来,真是一个泪流满面的事实… 那这样一个弱智题练手恢复代码能力,竟然还花了我两个晚上(当然不是两整个晚上…) 第一天TLE了, ...

  7. 【PKU1001】Exponentiation(高精度乘法)

    Exponentiation Time Limit: 500MS   Memory Limit: 10000K Total Submissions: 145642   Accepted: 35529 ...

  8. HDU 1042 N! 參考代码

    HDU 1042 N! 题意:给定整数N(0 ≤ N ≤ 10000), 求 N! (题目链接) #include <iostream> using namespace std; //每一 ...

  9. Vijos 1040 高精度乘法

    描述 高精度乘法 输入:两行,每行表示一个非负整数(不超过10000位) 输出:两数的乘积. 样例1 样例输入1 99 101 样例输出1 9999 题解 这道题和之前的Vijos 1010 清帝之惑 ...

随机推荐

  1. Android开发之View重写相关API-onLayout,onMeasure,MeasureSpec

     1.onLayout android.view.ViewGroup protected void onLayout(boolean changed, int l, int t, int r, int ...

  2. iOS常见的几种延时执行的方法

    1.performSelector [self performSelector:@selector(delayMethod) withObject:nil/*可传任意类型参数*/ afterDelay ...

  3. 配置toad进行导入导出数据库操作

    最近需要对oracle进行导入导出操作,于是研究使用toad进行导入导出oracle数据库操作,现稍作记录. oracle的导入导出不管是否使用toad还是pl/sql工具进行操作,实际上最终都是通过 ...

  4. css hack 大全

    各个浏览器的css hack区别属性: IE6: _zoom:1; IE6/7: *zoom:1; IE6/7/8/9 :\9 各个浏览器的css hack区别规则 IE6: *html{} IE7: ...

  5. CI框架篇之模型篇--初识(1)

    模型 模型是专门用来和数据库打交道的PHP类.例如,假设你想用CodeIgniter来做一个Blog. 你可以写一个模型类,里面包含插入.更新.删除Blog数据的方法. 下面的例子将向你展示一个普通的 ...

  6. centos7 安装php5.6.0 、nginx1.7.4、phpssdbadmin

    1 创建用户.网站目录和下载相关的安装包 groupadd www #添加www组 创建目录/data/www/ chown www:www /data/www/ -R #设置目录所有者 chmod ...

  7. org.hibernate.HibernateException: No CurrentSessionContext configured!

    hibernate可以通过两种方式获得Session: getCurrentSession() 和openSession(). 当通过getCurrentSession()方法时,需要在 hibern ...

  8. 初尝 MVC4

    文章内容参考 http://www.cnblogs.com/leoo2sk/archive/2008/10/27/1320285.html 开发环境 VS2010 ,VS2010 开发 MVC4 需下 ...

  9. ecshop---京东手机模板js的eval产生冲突的解决方法。

    今天弄ecshop手机模板的时候,发现首页的广告图出不来,js报错

  10. R.Net 用法

    using (REngine engine = REngine.CreateInstance("RDotNet")) { engine.Initialize(); var expa ...