这个题!!有诈啊!!以下内容涉及剧透,慎点!!
枉我辛辛苦苦自己写了求阶乘的函数(微笑脸)(虽然也没有很难大佬莫笑)
枉我辛辛苦苦动态创建数组把整数转换为二进制数并保存在数组里(微笑脸)
测试小的数字都没有问题(正得意)
然而!!
当我用了1000 500 这组数
我?????????
怎么回事????????
当我用阶乘计算器看了500!1000!时,哦呵呵!!!
所以说此题有诈。参考了大家的做法,终于get到:一个二进制数末尾零的个数就是对应十进制数中所含2的因子个数。
正解代码如下:
#include<iostream>
using namespace std;
int main()
{
int T;
cin >> T;
for (int i = 0; i < T; i++)
{
int m, n;
int a0=0, a1=0, a2=0;
cin >> m >> n;
for (int j = m; j > 0; j--)
{
int t = j;
while (t % 2 == 0)
{
a0++;
t/= 2;
}
}
for (int j = m-n; j > 0; j--)
{
int t = j;
while (t % 2 == 0)
{
a1++;
t /= 2;
}
}
for (int j = n; j > 0; j--)
{
int t = j;
while (t % 2 == 0)
{
a2++;
t /= 2;
}
}
cout <<((a0 - a1 - a2 > 0) ? (a0 - a1 - a2) : 0) << endl;
}
return 0;
}
/**********************************************************************
Language: C++
Result: AC
Time:0 ms
Memory:2020 kb
**********************************************************************/
看了summary我占用的内存还是大的一匹。。。如果大家对我的代码有什么优化的建议欢迎提出!!!