nyoj题目56:阶乘因式分解(一)

阶乘因式分解(一)

 时间限制:3000 ms  |  内存限制:65535 KB

难度:2

描述
给定两个数m,n,其中m是一个素数。
 
将n(0<=n<=10000)的阶乘分解质因数,求其中有多少个m。
 
输入第一行是一个整数s(0<s<=100),表示测试数据的组数
 随后的s行, 每行有两个整数n,m。输出输出m的个数。样例输入2
100 5
16 2
 样例输出24
15


#include <stdio.h>

int main ()

{
    int s, n, m, a, i, sum;
    scanf ("%d", &s);
    while (s--)
    {
          a = 0;
          scanf ("%d%d", &n, &m);
          n = n + 1;                 //这加一为了抵消后头的n--

          while (n--)
          {
               if (n == 0)
               break;             //若不将n==0排除,则在最后的时候,将会陷入死循环。
               sum = n;
               while (1)
               {
                    if (sum % m == 0)
                    {
                    a = a + 1;
                    sum = sum / m;        //求出个数。
                    }
                    else
                    break;
               }
          }
          printf ("%d\n", a);
    }
    return 0;
}


怎么说呢,自己感觉很满足,但知道,是很菜的代码。
错误一:
刚开始傻傻的去求100!,最后发现表示不了,苦苦思索才想到分不求。
错误二:
break的跳出,已经分清了,但一次的错误让自己一直对break有怀疑。
错误三:
没设置if n==0;若不设置的话最后没结果,自己一步步拆分,发现到n==0后就一直自己循环下去了,无穷尽。


优秀代码
#include<stdio.h>

int main()
{
 int n;
 int a, b;
 int t;

 scanf("%d", &n);

 while (n--)
 {
  t = 0;

  scanf("%d %d", &a, &b);
  
  while (a >= b)
  {
   t += a / b;
   a = a / b;
  }

  printf("%d\n", t);
 }

 return 0;
}       

一个轻松的两个式子表示了自己的好多行自己苦苦思索不出来。搞不清楚是因为计算机知识不够还是数学知识不够。
自己一个人走,在课闲的时候做一道水题而默默高兴,其他的人做了一二百道了,自己走的好慢,该不该找个人帮自己呢,无助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值