2018年第九届蓝桥杯 C++省赛B组 第三题:乘积尾零
题目: 第三题 标题:乘积尾零 如下的10行数据,每行有10个整数,请你求出它们的乘积的末尾有多少个零? 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? 注意:需要提交的是一个整数,表示末尾零的个数。不要填写任何多余内容。 解题思路: 方法一:一个数一个数的相乘,统计尾数为0的个数,这样计算数据量很大,会溢出 方法二:成绩为0的值一定是由2和5乘出来的,所以直接统计2和5的个数即可。最后取两个数中个数较小的作为答案。因为2与5必须成对的存在,对数最多为多少由数量较小的那个决定。 法二代码: #include #include #include #include #include using namespace std; int main() { int m,n; int a[11][11]; int sum2=0; int sum5=0; scanf("%d%d",&m,&n); for(int i=0;i for(int j=0;j { scanf("%d",&a[i][j]); while(a[i][j]) { if(a[i][j]%2==0) { sum2++; a[i][j]/=2; } else if(a[i][j]%5==0) { sum5++; a[i][j]/=5; } else break; } } int sum=min(sum2,sum5); cout< return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |