看似很简单,但想要AC就要解决超时问题
第一次提交时超时,因为做了太多的乘法运算
超时代码:
#include<iostream>
using namespace std;
#include<math.h>
int main()
{
int n,m,i,j;
scanf("%d",&n);
while(n--)
{
scanf("%d",&m);
for(i=1;i<m;i+=2)
{
for(j=1;j<22;j++)//因为是数字有范围 不用特别大 找个大致的数就行了
{
if(m==i*pow(2,j))
printf("%d %d\n",i,j);
}
}
}
return 0;
}
后来借鉴了一些博客的意见 可以有效减少乘法运算 大幅度提高效率 便AC了
AC代码:
#include<iostream>
using namespace std;
int main()
{
int d;
cin >> d;
while (d--)
{
int n;
cin >> n;
int p = 0;
while (n % 2 == 0)
{
n /= 2;
p++;
}
cout << n << " " << p << endl;
}
system("pause");
return 0;
}