天天看點

C語言藍橋杯刷題:尾積乘零

題目連結

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;
}
           
C語言藍橋杯刷題:尾積乘零

繼續閱讀