poj 1150 The Last Non-zero Digit

简介: 点击打开链接poj 1150 思路:组合数学+排列组合 分析: 1 求排列数A(n , m)的末尾第一个非0数。 2 总结一下,求n!最后一个非0位的步骤如下: step1:首先将n!中所有2,5因子去掉;step2:然后求出剩下的一串数字相乘后末尾的那个数。

点击打开链接poj 1150


思路:组合数学+排列组合
分析:

1 求排列数A(n , m)的末尾第一个非0数。

2 总结一下,求n!最后一个非0位的步骤如下:
step1:首先将n!中所有2,5因子去掉;
step2:然后求出剩下的一串数字相乘后末尾的那个数。
step3:由于去掉的2比5多,最后还要考虑多余的那部分2对结果的影响。
step4:output your answer!

详见 点击打开链接

代码:

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;

int a , b;
/*找到2 3 7 9的n次方后的最后一位的循环节*/
int hash[4][4] ={
    {6 , 2 , 4 , 8},/*2 4 8 16,16的时候是6但是下标只到3所以把6放在第一个位置,以下类似*/
    {1 , 3 , 9 , 7},
    {1 , 7 , 9 , 3},
    {1 , 9 , 1 , 9}
};

/*求出含有因子x的个数*/
int getFactor(int n , int m){
   if(m == 0)
     return 0;
   return m/n+getFactor(n , m/n);
}

/*求奇数系列*/
int getOdd(int n , int m){
   if(m == 0)
     return 0;
   return m/10+(m%10 >= n)+getOdd(n , m/5);
}

/*对序列求3 7 9的个数*/
int getAll(int n , int m){
   if(m == 0)
     return 0;
   return getAll(n , m/2)+getOdd(n , m);
}

int main(){
   int two , three , five , seven , nine;
   while(scanf("%d%d" , &a , &b) != EOF){
      if(!a || !b){
         printf("1\n");
         continue;
      }
      two = getFactor(2 , a)-getFactor(2 , a-b);
      five = getFactor(5 , a)-getFactor(5 , a-b);
      
      three = getAll(3 , a)-getAll(3 , a-b);
      seven = getAll(7 , a)-getAll(7 , a-b);
      nine = getAll(9 , a)-getAll(9 , a-b);
      
      two -= five;
      int ans = 1;
      /*当含有2和含有5的数相同时候对结果是没有影响的*/
      if(two) 
         ans *= hash[0][two%4];
      ans *= hash[1][three%4];
      ans *= hash[2][seven%4];
      ans *= hash[3][nine%4];
      printf("%d\n" , ans%10);
   } 
   return 0;
}



目录
相关文章
|
6月前
|
人工智能 自然语言处理 语音技术
GPT-4o mini TTS:OpenAI 推出轻量级文本转语音模型!情感操控+白菜价冲击配音圈
GPT-4o mini TTS 是 OpenAI 推出的轻量级文本转语音模型,支持多语言、多情感控制,适用于智能客服、教育学习、智能助手等多种场景。
303 2
GPT-4o mini TTS:OpenAI 推出轻量级文本转语音模型!情感操控+白菜价冲击配音圈
|
存储 运维 监控
Java中的实时日志分析与可视化
Java中的实时日志分析与可视化
|
编解码 C++
UVC调用过程部分细节分析
UVC调用过程部分细节分析
813 0
|
Web App开发 XML iOS开发
Tiktok 根据主播id(uniqueId)获取个人详细信息
Tiktok 根据主播id(uniqueId)获取个人详细信息
Tool:微信使用技巧之手把手教你如何在电脑端同时登录多个微信账号之图文教程详细攻略
Tool:微信使用技巧之手把手教你如何在电脑端同时登录多个微信账号之图文教程详细攻略
Tool:微信使用技巧之手把手教你如何在电脑端同时登录多个微信账号之图文教程详细攻略
|
Web App开发 JavaScript 前端开发
收到短信验证码自动填充到表单,还能这么玩
苹果系统上的App和网站可以实现来自短信的验证码自动填充表单的功能,通常你是怎么实现这个功能的
617 0
收到短信验证码自动填充到表单,还能这么玩
|
存储 JSON 前端开发
.net core实践系列之SSO-同域实现(一)
.net core实践系列之SSO-同域实现(一)
545 0
.net core实践系列之SSO-同域实现(一)
|
弹性计算 应用服务中间件 索引
建网站买云服务器,为什么我不再使用国外VPS?(对比阿里云)
以前我们为什么选择国外VPS建站?大概有几个原因。 国外VPS无需备案 备案很麻烦,似乎是国内站长的共识。大家都假设备案流程繁琐,周期长,个人站点备案成功率低。 这是不是事实?我会在后面讨论。
6365 0
建网站买云服务器,为什么我不再使用国外VPS?(对比阿里云)
|
NoSQL Shell
借助gdb实现pstack
pstack.sh:   #! /bin/sh if [ -z $1 ] then     echo "gdb script for print stack"     echo "usage: $0 pid"     exit fi   gdb --batch --quiet -...
978 0