回 帖 发 新 帖 刷新版面

主题:急!!!!帮忙解释一下~~

帮忙解释一下这个代码的意思
小弟跪谢了
#include <stdio.h>
#include <limits.h>
int main(void)
{
   int a[30], b[30], count, c=0, n, k, m, i, j, s=0, min;
   scanf("%d", &count);
   while (++c<=count)
   {
        scanf("%d%d", &k, &n);
        if ((m=k)&1) j=0;
        else
        {
            j=*b=1;
            while (!((m>>=1)&1)) ++*b;
            *a=2;
        }
        for (i=3; m>1; i+=2)
        {
            if (m%i==0)
            {
                b[j]=1;
                while ((m/=i)%i==0) b[j]++;
                a[j++]=i;
            }
        }
        min=INT_MAX;
        while (j)
        {
            for (s=0, i=a[--j]; i<=n; s+=n/i, i*=a[j]);
            if ((a[j]=s/b[j])<min) min=a[j];
        }
        printf("Scenario #%d:%d\n", c,min);
   }
   return 0;
}

回复列表 (共6个回复)

沙发

写的什么鸟东西

板凳

哈哈

3 楼

题目是这样子的

4 楼

[quote]写的什么鸟东西[/quote]
题目是这个样子的
 具体的不是很理解

题8. 数字游戏
玲玲喜欢通过玩数字游戏的方式来加深别人对她的印象。她最喜欢的一个数字游戏是让人给出一个数N,然后她会立即说出N的阶乘最末尾有多少个连续的零。很显然,这会让别人会对她印象深刻,因为,一般来说N!是一个非常大的数。例如,N为100时,100!会比地球上所有原子的数目还要大,但玲玲可以很快说出100!末尾有连续24个0。但是,她的一些朋友通常不是以10为进制的。这时,玲玲却不知道该怎么修改她的技巧来适应这些朋友了。

问题:
给出一个进制b和一个数n,计算当采用b进制时,n!末尾有多少个连续的0。例如,当b=2和n=5时,由于5!=120=1111000(2),结果应该为3.

输入:
第一行包含了总的计算次数。接下来的每一行给出了不同情况下的问题中的两个数b(2 ≤ b ≤ 1 000)和n(1 ≤ n ≤ 1 000 000),这两个数都是10进制的。

输出:
输出结果中,对每一次计算都以"Scenario #i:"开始,其中的i是从1开始的第i次计算。然后打印一行,输出:当采用b进制时,n!末尾有多少个连续的0(以十进制形式)。对每一次计算都以一个空白行结束。

输入样例:

2 5 
10 100 
45 10000 

对样例的正确输出:
Scenario  #1: 


Scenario  #2: 
24 

Scenario  #3: 
2498 

5 楼

郁闷。。。。开玩笑说

6 楼

 

我来回复

您尚未登录,请登录后再回复。点此登录或注册