首页 > 其他分享 >OJ :1089 : 阶乘的最高位

OJ :1089 : 阶乘的最高位

时间:2024-03-20 20:29:05浏览次数:16  
标签:数字 int 1089 result 1000 阶乘 highestDigit OJ

题目描述

输入一个正整数n。输出n!的最高位上的数字。

输入

输入一个正整数n(n不超过1000)。

输出

输出n!的最高位上的数字。

样例输入 
1000
样例输出 
4

思路: 

        这个问题的难点就在于如何处理据,需要注意数据溢出,比如1000的阶乘就很大很大,就算long long int 都存储不下,那么我们就用一个数组来存储阶乘的结果,然后从结果的高位开始找到第一个非零数字,即阶乘的最高位数字。不懂的可以结合代码的注释进行理解。

代码:

#include<stdio.h>

int main() 
{
    int n;
    scanf("%d", &n); // 从标准输入读取n

    // 定义一个数组来存储阶乘结果,最多需要1001位来表示n的阶乘
    int result[1001] = { 0 };
    result[0] = 1; // 初始值为1,因为1的阶乘等于1

    // 计算阶乘
    for (int i = 2; i <= n; i++) 
    {
        int carry = 0; // 进位
        // 逐位相乘
        for (int j = 0; j < 1001; j++) 
        {
            int product = result[j] * i + carry; // 当前位的乘积加上进位
            result[j] = product % 10; // 当前位的结果
            carry = product / 10; // 计算下一位的进位
        }
    }

    // 找到最高位上的数字
    int highestDigit;//需要在循环外进行声明,输出时要用到(涉及到局部变量)没理解可以私信问我
    for (highestDigit = 1000; highestDigit >= 0; highestDigit--) 
    {
        if (result[highestDigit] != 0) 
        {
            break; // 找到第一个非零数字,即最高位数字
        }
    }

    printf("%d", result[highestDigit]); // 输出最高位数字

    return 0;
}

标签:数字,int,1089,result,1000,阶乘,highestDigit,OJ
From: https://blog.csdn.net/2302_80025181/article/details/136887820

相关文章

  • NOJ南邮上机 矩阵变换问题 PROB1020 Python
    PROB1020   矩阵变换问题描述:给定一个 n×m的矩阵,对于 初始矩阵 中所有值为 1 的元素,重置其 所在行列 的所有元素为 0,最后输出整个修改后的矩阵。输入:输入共包含 1+n行。第一行包两个整数 n 和 m,分别表示矩阵的长和宽,题目保证 2≤n,m≤700且 4≤n×m......
  • YBTOJ祭—质数与约数
    目录线性筛素数欧拉筛,老生常谈个人感觉放这道题的代码不如放板子//欧拉筛intprime[maxn];intfactor[maxn];intPrime(intn){intp=0;for(inti=2;i<=n;i++){if(!factor[i]){prime[p++]=i;factor[i]=i;......
  • 各大OJ的插件(篡改猴)
    声明:我用的360,也不知道别的浏览器能不能用篡改猴下载?link进入页面后点击下载处黑色小猴子的去商店右边的灰色按钮然后启动下载的东西剩下的自己看着办洛谷smart-lougulink美化LuoguTaskslink在洛谷侧边栏显示题单与自己存的题LuoguSearchAnyWherelink在页面右......
  • 杭电OJ 2066 一个人的旅行
    一个人的旅行考查图论中的单源最短路径问题,首先图的存储方式,前面说过在实际程序中一般用邻接表,为每一个顶点都分配一个单链表(向量)。由于这里顶点的总个数并不确定,用visit数组在集合T中遍历寻找下一个用来松弛的顶点,这一方式不太合适,所以这里我用优先队列,每次弹出距离起始点距离......
  • SWUST OJ 961: 进制转换问题
    题目描述建立顺序栈或链栈,编写程序实现十进制数到二进制数的转换。输入输入只有一行,就是十进制整数。输出转换后的二进制数。样例输入10样例输出1010参考程序#include<iostream>usingnamespacestd;#definemaxsize100voidconcersion(intn){ inta[maxsize......
  • NOJ南邮上机 最大公约数和最小公倍数 PROB1006 Python
    PROB1006  最大公约数和最小公倍数描述:求两个正整数的最大公约数和最小公倍数输入:两个正整数A,B输出:两个正整数的最大公约数、最小公倍数样例输入:43样例输出:112defmax_gcd(a,b):whileb!=0:temp=a%ba=bb=temp......
  • CMU15445 2022fall project2
    CMU154452022fallproject2CheckPoint1Task1B+TreePages这部分主要是给page、internal、leaf三个page类实现一些get、set方法和一些简单的函数。注意点:判断rootpage:parentpageid=INVALID_PAGE_IDGetMinSize():叶子结点为max_size_/2,内部节点为(max_size_+1)......
  • POJ3057 Evacuation 题解
    传送门题意:给定一张字符地图,#代表墙,.代表空地,D代表门。初始每个空地都有一个人。每个人可以在一秒内向上下左右移动一格。一个空地可以站任意多人。一个人走到门视作逃生成功。但是门很窄,一个时刻内只能有一个人进门。问所有人逃生的最短时间。\(n\le12\)。注意到门一个......
  • [BZOJ3306] 树
    题目[BZOJ3306]树样例输入:37011213Q1V16Q1V25Q1V34Q1样例输出:1234数据范围\({n,Q\leq10^5}\)分析\(\color{skyblue}{1}\)这道题如果没有操作换根那她就是一道板得不能再板的一道板子题但是\(\color{red}{\large没有如果!}\)所以这......
  • 杭电OJ 2072-单词数
    单词数因为新学了散列表容器map,这道题只用统计不同单词的总数,用映射再统计个数蛮合适,学以致用doge,需要注意文章开头可能有空格,最后要把空格这一映射减掉。AC代码:#include<iostream>#include<cstdio>#include<map>#include<string>usingnamespacestd;map<string,......