> 데이터 베이스 > MySQL 튜토리얼 > [U]3.2.1 Factorials 有点点意思的水题

[U]3.2.1 Factorials 有点点意思的水题

WBOY
풀어 주다: 2016-06-07 15:39:06
원래의
1173명이 탐색했습니다.

以前在XTU的比赛中做过这个题,当时没过,到后面还是用了个猥琐的方法过的。 可能是不记得了当时用的高精度法没过,这次看到这题直接采用赤裸裸的高精度,结果... 在本地跑那速度.....= =|||| 于是乎,还是采用了猥琐的方法;但是为什么每次mod100000呢??

以前在XTU的比赛中做过这个题,当时没过,到后面还是用了个猥琐的方法过的。

可能是不记得了当时用的高精度法没过,这次看到这题直接采用赤裸裸的高精度,结果... 在本地跑那速度.....= =||||

于是乎,还是采用了猥琐的方法;但是为什么每次mod100000呢??而每次mod10000就WA呢?

解释:

首先我们不能采用赤裸裸的保留末位非零数的方法。

原因:进位,使得末位为0;而在一种情况下,会发生进位,两乘数含有2和5的因子,末位为0的数例如x*10==x*2*5,所以末位为零一定包含了这两个因子!而其他情况下是不会发生末位为0的进位的。通过这样便可以将所有使得进位的因素去除,去掉等量的2和5,以保持不进位,再通过保留个位的方式得出答案。

那么为啥每次要mod100000,当A,B∈[1,4220]最多有多少进位使得末位为0?(5^5=3125)

Code:

/*
ID:bysen
LANG:C++
PROG:fact4
*/
#include<stdio.h>
#define mod 100000
using namespace std;

int main()
{
 	freopen( "fact4.in","r",stdin );
 	freopen( "fact4.out","w",stdout );
 	int n;
 	scanf( "%d",&n );
 	int ans=1;
 	for( int i=1;i<br>
<br>



</stdio.h>
로그인 후 복사
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿