zoukankan      html  css  js  c++  java
  • 大数阶乘

    题目描述 

    给定一个整数N(0≤N≤10000),求取N的阶乘

    输入描述:

    多个测试数据,每个测试数据输入一个数N

    输出描述:

    每组用一行输出N的阶乘
    示例1

    输入

    1
    2
    3

    输出

    1
    2
    6
    思路
    刚开始看到这个题目,写了个直接乘过去的,是用long long 在提
    交之前测了一下最大的数4000,程序输出0,稍微小
    点的数字输出是负数,发现longlong完全不够用,后来我尝试使用数组去模拟乘法,但我最终还是没有写出来
    于是翻看了这篇博客,他的程序非常巧妙,只使用了一个数组,于是我模仿着写了自己的程序
    总结
    先思考再动手,不要写到半路才发现行不通
    #include <cstdio>
    #include <iostream>
    #include <cstdlib>
    using namespace std;
    #define INF 0x3f3f3f3f//可以用于memset
    int num[40000];
    int main()
    {
        int n;
         while(cin>>n)
         {
             num[1]=1;
             int fla=1,carry=0,res;//fla记录这个大数的位数,carry记录上次乘法多余的部分
             for(int i=2;i<=n;i++)
             {
                 for(int j=1;j<=fla;j++)
                 {
                     res=i*num[j]+carry;
                     num[j]=res%10;
                     carry=res/10;
                 }
                 while(carry)
                 {
                     fla++;
                     num[fla]=carry%10;
                     carry/=10;
                 }
             }
             for(int i=fla;i>=1;i--)
                printf("%d",num[i]);
             printf("
    ");
         }
        return 0;
    }
  • 相关阅读:
    Azure SQL Storage
    T-SQL quries
    映射盘符
    繁体及其输入法、乱码问题
    匈牙利命名法
    C++四种转换总结
    windows系统下进程间通信
    Qt 中文字符串问题
    PDB文件详解
    DbgView 无法开启Capture Kernel问题
  • 原文地址:https://www.cnblogs.com/carcar/p/8462689.html
Copyright © 2011-2022 走看看