C语言蓝桥杯刷题:尾积乘零

题目链接
在这里插入图片描述
解题思路
末尾是0,只有可能是5与其他偶数的乘积
偶数又可被分为若干个2相乘
所以该题可以转化为把乘数都分解,统计2和5的数量

假设最后得到x个2,y个5
x>y,比如2个2,1个5,最后乘出来是20,也就是1个0
x<y,比如1个2,2个5,最后乘出来是50,也就是1个0
x=y,比如2个2,2个5,最后乘出来是100,也就是2个0
易知最后0的个数=min(x,y)

代码如下

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  

  int i=0;
  int x=0;
  int y=0;
  int arr[100]={5650,4542, 3554, 473, 946, 4114 ,3871, 9073, 90, 4329,
                   2758, 7949, 6113, 5659, 5245, 7432, 3051, 4434, 6704, 3594,
                   9937, 1173, 6866, 3397, 4759, 7557 ,3070, 2287, 1453, 9899,
                   1486 ,5722, 3135, 1170, 4014, 5510, 5120, 729, 2880, 9019,
                   2049, 698, 4582, 4346, 4427, 646, 9742, 7340, 1230, 7683,
                   5693, 7015, 6887, 7381, 4172, 4341, 2909, 2027, 7355, 5649,
                   6701 ,6645, 1671, 5978, 2704, 9926, 295, 3125, 3878, 6785,
                   2066 ,4247, 4800, 1578, 6652, 4616, 1113, 6205, 3264, 2915,
                   3966 ,5291 ,2904 ,1285, 2193, 1428 ,2265 ,8730 ,9436, 7074,
                   689,5510 ,8243, 6114, 337, 4096, 8199 ,7313 ,3685, 211 };
  for(i=0;i<100;i++)
  {
    int tmp=arr[i];//后面还需要用到arr[i],所以防止数据被破坏,这里用临时变量获取到arr[i],我们使用tmp
    while(tmp%2==0)//看是否能被2分解,如果可以,获取分解得到2的个数
    {
      x++;
      tmp/=2;
    }
    tmp=arr[i];
     while(tmp%5==0)//看是否能被5分解
    {
      y++;
      tmp/=5;
    }
  }
  printf("%d",x>y?y:x);
  return 0;
}

在这里插入图片描述

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

劲夫学编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值