到底要怎么样才能存储一百的阶乘????

发布时间:2020-01-30 15:24:01
贴主:林老熊
热度:6
正在讨论:P1002 - How many zero 题目传送门

林老熊 2020-01-30

#include"iostream"
using namespace std;
int main()
{
	int N,sum=0;
	long long int NA = 1;
	cin >> N;
	for (int i = 1; i <= N; i++)
	{
		NA = NA * i;
	}
	long long int g = NA;
	for (int i = 10; i < g; g=g/10)
	{
		if (NA%10 == 0)
		{
			sum = sum + 1;
		}
		NA = NA / 10;
	}
	cout << sum;
}

我这个龙鸣代码,大家看个笑,如果有知道怎么做的dalao能够教教我就太好了

(0)

qwq 2020-01-30

先说这题的目的就不在于让你存储100!之类的东西。。。。而是要靠——找规律!//(算法);我的想法是:末尾想要有0,则必须得有两个数相乘之和为10的倍数,譬如2*5=10,4*5=20……总而言之就是:必须要有5。因此,想知道一个数的阶乘后面有几个零,只需要找出小于等于这个数的正整数中有多少个5,即可。譬如当n=100,100/5=20,因此有20个数是5的倍数,而其中如25=5*5,50=5*5*2,75=5*5*3,100=5*5*4……,这些数又可以多拆分出4个5,所以在100以内5的数量是24,也就是最后的答案!

实现如下:

#include"iostream"
using namespace std;
int main()
{
 int n, cnt = 0;
 cin >> n;
 for (int i = 5; i <= n; i++)
 {
  if (i % 5 == 0)
  {
   cnt++;
   if (i % 25 == 0)
   {
    cnt++;
   }
  }
 }
 cout << cnt;
 return 0;
}
(2)

0 2020-01-31

2L实属厉害,我是不断取模暴力做的

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
	int n,cnt = 0;
	cin >> n;
	int sum=1;
	for (int i = 1; i <= n; i++)
	{
		sum = sum * i % 100000;
		if (sum % 10 == 0)
		{
			while (1)
			{
				if (sum % 10 == 0)
				{
					cnt++;
					sum /= 10;
				}
				else
				{
					break;
				}
			}
		
		}
	}
	cout << cnt;
	return 0;
}
(0)

小草莓 2020-09-29

2L大佬的思路太棒了!这是我的:

#include"iostream"
using namespace std;
int main()
{
	long long n, temp = 1, i = 1, j = 0;
	cin >> n;
	while (i <= n)
	{
		temp *= i;
		if (temp % 10 == 0)
		{
			while (temp % 10 == 0)
			{
				temp = temp / 10;
				j++;
			}
			temp = 1;
		}
		i++;
	}
	cout << j;
	return 0;
}
(0)

Copyright 2016 - 2024 XUJC ACM Team
闽ICP备2020022076号-1