Следующий код предназначен для определения общего количества номеров между l
и r
, чей продукт цифр четный (для нескольких тестовых примеров t
). Этот код работает отлично, но очень медленный для r
больше, чем 100000. Может ли кто-нибудь предложить лучшую альтернативу?Как сделать этот код даже быстрее?
#include <iostream>
#include <algorithm>
using namespace std;
long long int nd(long long int x, int n) //return the digit at a particular index staring with zero as index for unit place
{
while (n--) {
x /= 10;
}
return (x % 10);
}
int ng(long long int number) //returns total number of digits in an integer
{
int digits = 0;
if (number < 0) digits = 1;
while (number) {
number /= 10;
digits++;
}
return digits;
}
int main()
{
int t;
cin>>t;
long long int l[t], r[t], c;
for(long long int j=0;j<t;j++)
{
cin>>l[j]>>r[j];
}
for(long long int k=0;k<t;k++)
{
long long int sum=0;
long long int t=0;
for(long long int i=l[k];i<=r[k];i++)
{
while(t<ng(i))
{
c=nd(i,t);
if((c%2)==0)
{
++sum;
break;
}
++t;
}
t=0;
}
cout<<sum<<endl;
}
cin.ignore();
cin.get();
return 0;
}
Было бы неплохо, если бы вы могли документировать свой текущий подход, чтобы мы могли определить, была ли ваша реализация неисправной, а не подходом. – Bathsheba
И немного более значимые имена методов помогли бы! – Nanda
Это был бы хороший кандидат на http://codereview.stackexchange.com/. – BenC