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

    N!

    Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)
    Total Submission(s): 84139    Accepted Submission(s): 24802

    Problem 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
     
    Author
    JGShining(极光炫影)
     
    题解看注释吧,我妈叫我吃饭了
    AC代码:
    #include <iostream>
    #include <algorithm>
    #include <cstring>
    #include <cmath>
    #include <cstdlib>
    using namespace std;
     
    char a[100005], result[100005];//是动态数组,a和result用于互传
    int b;//单纯一个数字
     
    int m[100005], p[100005];//m是把a从字符串转成数字用于计算
    //————————————————————其实可以把m和p合并缩短代码这俩都是中间计算用的
    //字符型a>>>>m>>>>p>>>>result>>>a>>>循环
    // 大数乘小数
    // 大数a乘以小数b,结果返回给result
    void b_s(char a[], int b, char result[])
    {
        // 初始化
        memset(m, 0, sizeof(m));
        memset(p, 0, sizeof(p));
        int len = strlen(a);//每次计算一遍计算a的长度
        for(int i=0; i<len; ++i)// 把a逆序赋给m整形数组
            m[i] = a[len-i-1]-'0';
        for(int i=0; i<len; ++i)// 逐位相乘结果存入int型p中
            p[i] = m[i]*b;
        for(int i=0; i<len; ++i)// 对p处理,满十进一
        {
            if(p[i]>=10)
            {
                p[i+1] += p[i]/10;
                p[i] = p[i]%10;
            }
        }
        while(p[len])//单独判断要是p的最后一位大于十,进位
        {
            if(p[len]>=10)
            {
                p[len+1] += p[len]/10;
                p[len] = p[len]%10;
            }
            len++;
        }
        for(int i=0; i<len; ++i)//还原成字符串到result方便输出
           result[i] = p[len-i-1]+'0';//把a
        result[len] = 0;//结束
    }
     
    int main()
    {
        int n;
        while(cin >> n)
        {
            if(n == 0 || n == 1)//特例+开头
            {
                cout << 1 << endl;
                continue;
            }
            memset(a, 0, sizeof(a));
            memset(result, 0, sizeof(result));
            a[0] = '1';//初始化开头
            for(int i=2; i<=n; ++i)
            {
                b_s(a, i, result);
                strcpy(a, result);//字符串中的函数把result复制到a里
            }
            for(int i=0; i<strlen(result); ++i)//这里会有一条警告,但是没关系
                //warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
                printf("%c", result[i]);
            printf("
    ");
        }
    return 0; }

    今天也是元气满满的一天!good luck!

  • 相关阅读:
    MySpace的六次重构
    为SQL Server 2005启用对 4 GB 以上物理内存的支持
    MyBatis拦截器自定义分页插件实现
    SpringBoot中快速实现邮箱发送
    2010全面兼容IE6IE7IE8FF的CSS HACK写法
    详细的win2003 IIS6.0 301重定向带参数的问题(实现网站的整体301跳转)
    call和apply方法
    offsetLeft、clientHeight、scrollLeft、clientLeft
    JS中的escape() & encodeURI() & encodeURIComponent() 区别
    俺的分布式架构系统之计算机网络1
  • 原文地址:https://www.cnblogs.com/cattree/p/7514187.html
Copyright © 2011-2022 走看看