HDU 1042 N!
JAVA
import java.io.*;
import java.util.*;
import java.math.BigInteger;
import java.math.BigDecimal;;
public class aa
{
public static void main( String args[] )
{
int a;
Scanner in = new Scanner ( System.in );
//int t = in.nextInt();
while( in.hasNext() )
{
a = in.nextInt();
BigInteger res = BigInteger.ONE;
for( int i = 1; i <= a ; ++i )
res = res.multiply( BigInteger.valueOf((long)i) );
System.out.println( res );
}
}
}
此题是以大数相乘的基本题,直接把模板套上即可
#include<stdio.h>
#include<string.h>
const int Maxsize = 1000000;
int num[Maxsize],n,len;
void cal( int n )
{
num[0] = 1;
for( int i = 1; i <= n; ++i )
{
int j = 0,t = 0;
while( num[len] )//没有这里直接用Maxsize会超时的
++len;
len = len < Maxsize - 151 ? len : Maxsize;//防止len + 151 >Maxsize
for( ; j < len + 150; ++j )
{
num[j] *= i;//每一位都与i相乘
t += num[j];//乘完后进位
num[j] = t % 10;
t /= 10;
}
}
}
int main( )
{
while( scanf( "%d",&n ) != EOF )
{
memset( num,0,sizeof( num ) );
len = 0;
cal( n );
int j = len + 150;
while( !num[j] )//找长度
--j;
for( ; j >= 0; --j )
printf( "%d",num[j] );
puts( "" );
}
return 0;
}
邪恶的JAVA,几句话就解决了,比赛的时候优先用JAVA
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner cin = new Scanner ( System.in );
BigInteger one = BigInteger.ONE;
while ( cin.hasNext() ) {
BigInteger N = cin.nextBigInteger();
BigInteger sum = new BigInteger ( "1" );
for ( BigInteger i = BigInteger.ONE; i.compareTo(N) <= 0; i = i.add(one) ) {
sum = sum.multiply( i );
}
System.out.println( sum );
}
}
}
本人还是新手 ,转载请注明来自Lvsi‘s home
浙公网安备 33010602011771号