Я новичок в программировании. Я могу найти числа, состоящие из четных цифр, но сложность моего алгоритма O (n). Для больших n
мой алгоритм слишком медленный. Поэтому мне нужен более эффективный алгоритм. Может кто-нибудь помочь мне?
Например, первые числа с четными цифрами — это 0, 2, 4, 6, 8, 20, 22, 24, 26, 28, 40 и т. д. 2686 — еще один пример числа с четными цифрами.
Вот мой код: http://ideone.com/nsBzej
#include<bits/stdc++.h>
using namespace std;
long long int a[10],b[20];
long long int powr(int i)
{
long long int ans=5;
for(int j=2;j<=i;j++)
{
ans=ans*5;
}
return ans;
}
int main()
{
//freopen("input.txt","r",stdin);
//freopen("output.txt","w",stdout);
long long int n,s,sum,p;
int t;
cin>>t;
for(int j=1;j<=t;j++)
{
s=20,sum=0;
a[1]=0, a[2]=2, a[3]=4, a[4]=6, a[5]=8;
for(int i=1;i<=17;i++)
{
b[i]=s;
s=s*10;
}
cin>>n;
for(int i=17;i>=1;i--)
{
p=powr(i);
while(p<n)
{
sum=sum+b[i];
n=n-p;
}
}
printf("Case %d: %lld\n",j,sum);
}
}
Это сложность O(n). Но я получаю неверный вердикт.