hdu-1042(大数+万进制)

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

参考文章:https://blog.csdn.net/tigerisland45/article/details/51530528

题意:求n!(n<=1000)数字很大,可以用万进制来做,就是到了10000就进一,每个数字用数组存储。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int a[100100];
void fun(int n)
{
    memset(a,0,sizeof(a));
    a[0]=1;
    int tp,i,j,dig=1;
    for(i=2;i<=n;i++)
    {
        tp=0;
        for(j=0;j<dig;j++)
        {
            a[j]=a[j]*i+tp;
            tp=a[j]/10000;
            a[j]=a[j]%10000;
        }
        if(tp>0)
        {
            a[dig++]=tp;
        }
    }
    printf("%d",a[dig-1]);
    for(i=dig-2;i>=0;i--)
    printf("%04d",a[i]);
    printf("\n");
}
int main(void)
{
    int n;
    while(~scanf("%d",&n))
    {
        fun(n);
    }
    return 0;
}

原文地址:https://www.cnblogs.com/2018zxy/p/9745635.html

时间: 2024-11-02 12:58:40

hdu-1042(大数+万进制)的相关文章

(大数 万进制) N! hdu1042

N! Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 88267    Accepted Submission(s): 26008 Problem Description Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N! Input One N in o

HDU1042 N!(大数问题,万进制)

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1042 N! Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 89320    Accepted Submission(s): 26376 Problem Description Given an integer N(0 ≤ N ≤ 1

hdu 4937 Lucky Number ( 进制转换+枚举 )

题意: 有一个数n,问有多少个进制x(基数)使得n转换为x进制后的数字中只有3.4.5.6四个数. 算法: 对于只有一位数的情况,显然3.4.5.6都应该输出-1. 如果有2位数,假设这2位中高位为a,低位为b,进制为base,则 n = a * base + b,解一元一次方程即可. 如果有3位数,假设这3为从高到低分别为a.b.c,进制为base,则 n = a * base * base + b * base + c,即一元二次方程即可. 如果位数>= 4,可以暴力枚举进制数.base>

HDU 3001 Travelling 3进制状压dp

题意:10个点,若干条边,边有花费,每个点最多走两次,求走过所有点,花费最少 分析:因为每个点最多走两次,所以联想到3进制,然后枚举状态,就行了(我也是照着网上大神的代码写的) #include <cstdio> #include <iostream> #include <cstring> #include <cstdlib> #include <vector> #include <string> #include <cmath

HDU 1042 大数阶乘

B - 2 Time Limit:5000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 1042 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. Outpu

HDU 2106 decimal system (进制转化求和)

题意:给你n个r进制数,让你求和. 析:思路就是先转化成十进制,再加和. 代码如下: #include <iostream> #include <cstdio> #include <algorithm> #include <queue> #include <vector> #include <cstring> #include <map> using namespace std; const int maxn = 70;

Java 大数任意进制转换

import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner cin = new Scanner(System.in); String s = cin.nextLine(); int x = cin.nextInt(); int y = cin.nextInt(); System.out.println(Transform(s,x,y)); } //s:输入的数字 x:

HDU 1042 大数计算

这道题一开始就采用将一万个解的表打好的话,虽然时间效率比较高,但是内存占用太大,就MLE 这里写好大数后,每次输入一个n,然后再老老实实一个个求阶层就好 java代码: 1 /** 2 * @(#)Main.java 3 * 4 * 5 * @author 6 * @version 1.00 2014/12/21 7 */ 8 import java.util.*; 9 import java.math.*; 10 11 public class Main { 12 //public stati

HDU 5050 Divided Land(进制转换)

题意  给你两个二进制数m,n   求他们的最大公约数  用二进制表示  0<m,n<2^1000 先把二进制转换为十进制  求出最大公约数  再把结果转换为二进制  数比较大要用到大数 import java.util.*; import java.math.*; public class wl6_9 { static BigInteger two = BigInteger.valueOf(2), one = BigInteger.ONE, zero = BigInteger.ZERO; s