游游拿到了一个数组,她准备在其中选择两个数,使得乘积的末尾至少有个0。游游想知道,至少有多少种不同的取数方法?
区块链毕设网qklbishe.com为您提供问题的解答
游游拿到了一个数组,她准备在其中选择两个数,使得乘积的末尾至少有个0。游游想知道,至少有多少种不同的取数方法?
#include <iostream> #include <string> using namespace std; #include<bits/stdc++.h> //pow(2,30)>1e9 //pow(5,20)>1e9 int nums[31][21]; //求一个数末尾有多少个0,即求2和5相等的个数 int main() { int n, x; long long res = 0; cin >> n >> x; for (int i = 0; i < n; ++i) { int a; scanf("%d", &a); int x = 0, y = 0; while (a % 2 == 0) { ++x; a /= 2; } while (a % 5 == 0) { ++y; a /= 5; } ++nums[x][y];//a由x个2,y个5组成 } for (int i = 0; i <= 30; ++i) { for (int j = 0; j <= 20; ++j) { //统计末尾0个数一样的 if (nums[i][j]) { int k1 = min(i, j); if (2 * k1 >= x) { res += nums[i][j] * (nums[i][j] - 1); } } else continue; for (int i2 = 0; i2 <= 30; ++i2) { for (int j2 = 0; j2 <= 20; ++j2) { if (i2 == i && j2 == j||nums[i2][j2]==0)continue; int k2 = min(i2 + i, j2 + j); if (k2 >= x) { res += nums[i][j] * nums[i2][j2]; } } } } } ////算两遍(a,b) (b,a).所以最后/2 printf("%lld", res / 2); return 0; } // 64 位输出请用 printf("%lld")
37:56
以上就是关于问题游游拿到了一个数组,她准备在其中选择两个数,使得乘积的末尾至少有个0。游游想知道,至少有多少种不同的取数方法?的答案
欢迎关注区块链毕设网-
专业区块链毕业设计成品源码,定制。
区块链NFT链游项目方科学家脚本开发培训