在C ++中计算(1 ^ 1)*(2 ^ 2)*(3 ^ 3)*(4 ^ 4)* ..中尾随零的数量

给定整数num作为输入。目的是找到乘积11 X 22 X 33 X…X num num中的尾随零数。

例如

输入值

num=5
输出结果
Count of number of trailing zeros in (1^1)*(2^2)*(3^3)*(4^4)*.. are: 5

说明

The number of 2s and 5s in the product will be:
11 * 22* 33* 44* 55=11 * 22* 33* (22)4* 55. So total 10 2s and 5 5s, minimum is 5 so trailing zeroes will be 5.

输入值

num=10
输出结果
Count of number of trailing zeros in (1^1)*(2^2)*(3^3)*(4^4)*.. are: 5

说明

The number of 2s and 5s in the product will be:
11 *22*33*44*55*66 *77*88*99*1010 = 11 *22*33*44*55*66 *77*88*99*(2*5)10. So total 20 2s and 15 5s, minimum is 15 so trailing zeroes will be 15.

以下程序中使用的方法如下-

在这种方法中,我们将计算乘积中每个数字的素数分解中2s和5s的数量。当每个数字提高到自己的幂时,因式分解中2s或5s的最小值将给出尾随零的计数。由于每个2 * 5在产品中加一个0。

  • 以整数num作为输入。

  • 功能 count_trailing(int num) 取num并返回(1 ^ 1)*(2 ^ 2)*(3 ^ 3)*(4 ^ 4)* ..中尾随零的数量的计数。

  • 将初始计数设为0。

  • 对于2s和5s的计数,取变量temp_2 = 0,temp_5 = 0。

  • 使用从i = 1到i <= num的for循环遍历。

  • 以临时工为我。

  • 虽然temp被2整除,然后将其减半,然后加上i以将temp_2计为2s。

  • 虽然temp可被5整除,然后将其除以5,然后加i以将temp_5计为5s的数量。

  • 使用count = min(temp_2,temp_5)将count至少为两个计数。

  • 返回计数作为结果。

示例

#include <bits/stdc++.h>
using namespace std;
int count_trailing(int num){
   int count = 0;
   int temp_2 = 0;
   int temp_5 = 0;
   for (int i = 1; i <= num; i++){
      int temp = i;
      while(temp % 2 == 0 && temp > 0){
         temp = temp / 2;
         temp_2 = temp_2 + i;
      }
      while (temp % 5 == 0 && temp > 0){
         temp = temp / 5;
         temp_5 = temp_5+ i;
      }
   }
   count = min(temp_2, temp_5);
   return count;
}
int main(){
   int num = 5;
   cout<<"Count of number of trailing zeros in (1^1)*(2^2)*(3^3)*(4^4)*.. are: "<<count_trailing(num);
   return 0;
}
输出结果

如果我们运行上面的代码,它将生成以下输出-

Count of number of trailing zeros in (1^1)*(2^2)*(3^3)*(4^4)*.. are: 5

猜你喜欢