N! HDU 1042
N!
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 60244 Accepted Submission(s): 17166
2
3
2
6
#include <iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
using namespace std;
int a[];
int main()
{
int n;
int i,j;
while(~scanf("%d",&n))
{
if(n==)
{
printf("1\n");
continue;
}
memset(a,,sizeof(a));
a[]=;
for(i=;i<=n;i++)
{
for(j=;j<;j++)
a[j]*=i;
for(j=;j<;j++)
{
a[j+]+=a[j]/;
a[j]%=;
}
}
for(i=;i>=;i--)
{
if(a[i]!=)
break;
}
printf("%d",a[i--]);
for(;i>=;i--)
printf("%05d",a[i]);
printf("\n");
}
return ;
}
-----------------------------------------------
#include <iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
using namespace std;
int a[];
int main()
{
//freopen("in.txt","r",stdin);
int n;
int i,j,temp;
while(~scanf("%d",&n))
{
memset(a,,sizeof(a));
a[]=;
int count=;
for(i=;i<=n;i++)
{
int k=;
for(j=;j<count;j++)
{
temp = a[j]*i+k;
a[j]=temp%;
k=temp/;
}
while(k)
{
a[count++]=k%;
k/=;
}
}
for(i=;i>=;i--)
{
if(a[i]!=)
break;
}
for(;i>=;i--)
printf("%d",a[i]);
printf("\n");
}
return ;
}
模板:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <assert.h>
#include <ctype.h>
#include <map>
#include <string>
#include <set>
#include <bitset>
#include <utility>
#include <algorithm>
#include <vector>
#include <stack>
#include <queue>
#include <iostream>
#include <fstream>
#include <list>
using namespace std; const int MAXL = ;
struct BigNum
{
int num[MAXL];
int len;
BigNum()
{
memset(num,,sizeof(num));
}
}; //高精度比较 a > b return 1, a == b return 0; a < b return -1;
int Comp(BigNum &a, BigNum &b)
{
int i;
if(a.len != b.len) return (a.len > b.len) ? : -;
for(i = a.len-; i >= ; i--)
if(a.num[i] != b.num[i]) return (a.num[i] > b.num[i]) ? : -;
return ;
} //高精度加法
BigNum Add(BigNum &a, BigNum &b)
{
BigNum c;
int i, len;
len = (a.len > b.len) ? a.len : b.len;
memset(c.num, , sizeof(c.num));
for(i = ; i < len; i++)
{
c.num[i] += (a.num[i]+b.num[i]);
if(c.num[i] >= )
{
c.num[i+]++;
c.num[i] -= ;
}
}
if(c.num[len])
len++;
c.len = len;
return c;
}
//高精度乘以低精度,当b很大时可能会发生溢出int范围,具体情况具体分析
//如果b很大可以考虑把b看成高精度
BigNum Mul1(BigNum &a, int &b)
{
BigNum c;
int i, len;
len = a.len;
memset(c.num, , sizeof(c.num));
//乘以0,直接返回0
if(b == )
{
c.len = ;
return c;
}
for(i = ; i < len; i++)
{
c.num[i] += (a.num[i]*b);
if(c.num[i] >= )
{
c.num[i+] = c.num[i]/;
c.num[i] %= ;
}
}
while(c.num[len] > )
{
c.num[len+] = c.num[len]/;
c.num[len++] %= ;
}
c.len = len;
return c;
} //高精度乘以高精度,注意要及时进位,否则肯能会引起溢出,但这样会增加算法的复杂度,
//如果确定不会发生溢出, 可以将里面的while改成if
BigNum Mul2(BigNum &a, BigNum &b)
{
int i, j, len = ;
BigNum c;
memset(c.num, , sizeof(c.num));
for(i = ; i < a.len; i++)
{
for(j = ; j < b.len; j++)
{
c.num[i+j] += (a.num[i]*b.num[j]);
if(c.num[i+j] >= )
{
c.num[i+j+] += c.num[i+j]/;
c.num[i+j] %= ;
}
}
}
len = a.len+b.len-;
while(c.num[len-] == && len > )
len--;
if(c.num[len])
len++;
c.len = len;
return c;
}
void print(BigNum &a) //输出大数
{
int i;
for(i = a.len-; i >= ; i--)
printf("%d", a.num[i]);
puts("");
} void Init(BigNum &a, char *s, int &tag) //将字符串转化为大数
{
int i = , j = strlen(s);
if(s[] == '-')
{
j--;
i++;
tag *= -;
}
a.len = j;
for(; s[i] != '\0'; i++, j--)
a.num[j-] = s[i]-'';
} int main(void)
{
int n;
while(~scanf("%d",&n))
{
BigNum a;
int tag=;
Init(a,"",tag);
for(int i=;i<=n;i++)
{
a=Mul1(a,i);
}
print(a);
}
return ;
}
N! HDU 1042的更多相关文章
- HDU 1042 N! 參考代码
HDU 1042 N! 题意:给定整数N(0 ≤ N ≤ 10000), 求 N! (题目链接) #include <iostream> using namespace std; //每一 ...
- HDU 1042 大数阶乘
B - 2 Time Limit:5000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Submit Statu ...
- hdu 1042 N!
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1042 N! Description Given an integer N(0 ≤ N ≤ 10000) ...
- hdu 1042 N!(高精度乘法 + 缩进)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1042 题目大意:求n!, n 的上限是10000. 解题思路:高精度乘法 , 因为数据量比较大, 所以 ...
- Hdu 1042 N! (高精度数)
Problem Description Givenan integer N(0 ≤ N ≤ 10000), your task is to calculate N! Input OneN in one ...
- HDU 1042 N!(高精度计算阶乘)
N! Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...
- hdu 1042 N!(大数的阶乘)
N! Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...
- hdu 1042
貌似之前也写过这个题目的解题报告...老了,记性不好 从贴一遍吧! 代码理解很容易 AC代码: #include <iostream> #include <stdio.h> # ...
- hdu 1042 N!(高精度乘法)
Problem Description Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N! Input One N in ...
随机推荐
- Android app version code and name
android:versionCode和android:versionName 区别 Android的版本可以在androidmainfest.xml中定义, 主要有android:version ...
- net 中捕获摄像头视频的方式及对比(How to Capture Camera Video via .Net) (转)
作者:王先荣前言 随着Windows操作系统的不断演变,用于捕获视频的API接口也在进化,微软提供了VFW.DirectShow和MediaFoundation这 三代接口.其中VFW早已被Di ...
- 生成动态前缀且自增号码的Oracle函数
create or replace Function GetInvitationNO(prev varchar2, num1 varchar2, num2 varchar2, sessionSetti ...
- PHP连接SQL Server(sqlsrv)
配置好php环境后,下载如下依赖包,解压目录选择php的ext目录,并在php.ini中加上(我的php版本为5.6) extension=php_pdo_sqlsrv_56_ts.dll exten ...
- WPF 控件截图位置不正确的问题
用WPF的RenderTargetBitmap可以截取控件内容到一张图片上,但是实际使用的时候经常出现截取的位置不正确的问题.今天是第二次解决这个问题,所以记录下,免得再忘了. RenderTarge ...
- Posix 信号量
作用 信号量的值为0或正整数,就像红灯与绿灯,用于指示当前是否可以接受任务. 信号量对进程和线程都适用. gcc编译时需加-lpthread 基本函数 信号量的相关函数与标准文件函数非常相似,可以理解 ...
- iOS中的堆(heap)和栈(stack)的理解
操作系统iOS 中应用程序使用的计算机内存不是统一分配空间,运行代码使用的空间在三个不同的内存区域,分成三个段:“text segment “,“stack segment ”,“heap segme ...
- MVC C# 调用存储过程
SqlParameter[] param ={ new SqlParameter("@SignInfoId ",SqlDbType.Int), new SqlParameter(& ...
- 简单的C#线程开发实例(隔一秒改变一下Label的Text)
要实现的效果:点击按纽,窗口上的label上出现1~100数字的变化. 第一个实例(把窗口上的label上文字改成0): using System; using System.Windows.Form ...
- mysql5.5 Replication 主从同步
mysql5.5 Replication 主从同步 ------------------[主]------------------[mysqld]server-id=1 log-bin=mysql-b ...