小明非常不喜欢数字 2,包括那些数位上包含数字 2 的数。如果一个数的数位不包含数字 2,小明将它称为洁净数。
请问在整数 1 至 n 中,洁净数有多少个?
#include <stdio.h>
#include <stdlib.h>
int Count1(int n);
int Count2(int n);
int Count3(int n);
int Count4(int n);
int Count5(int n);
int main()
{
long count=0;
int n;
scanf("%d",&n);
if(n<0||n>1000000)
{
exit(0);
}
if(n>0&&n<100)
{
count=Count1(n);
}
if(n>=100&&n<1000)
{
count=Count2(n);
}
if(n>=1000&&n<10000)
{
count=Count3(n);
}
if(n>=10000&&n<100000)
{
count=Count4(n);
}
if(n>=100000&&n<1000000)
{
count=Count5(n);
}
if(n==1000000)
count=531441;
printf("%d",count);
}
int Count1(int n)
{
int count=0;
int a;
if(n/10>2)
{
count+=(n/10-1)*9;
a=n%10;
if(a>=2)
{
count+=(a-1);
}
else if(a<2)
{
count+=a;
}
}
if(n/10==2)
{
count=9;
}
if(n/10==1)
{
count=9+n%10;
if(n%10>=2)
count-=1;
}
if(n/10==0)
{
count+=n;
if(n%10>=2)
count-=1;
}
return count;
}
int Count2(int n)
{
int count=0;
int a,b;
if(n/100>2)
{
b=n/100;
count=(b-1)*81;
a=n-100*b;
count+=Count1(a);
}
if(n/100==2)
{
count=161;
}
if(n/100==1)
{
a=n-100;
count=80+Count1(a);
}
return count;
}
int Count3(int n)
{
int a,b;
int count=0;
a=n/1000;
if(a>2)
{
count=729*(a-1);
b=n-a*1000;
count+=Count2(b);
}
if(a==2)
{
count=1457;
}
if(a==1)
{
b=n-1000;
count=729+Count2(b);
}
return count;
}
int Count4(int n)
{
int a,b;
long count=0;
a=n/10000;
if(a>2)
{
count=6561*(a-1);
b=n-a*10000;
count+=Count3(b);
}
if(a==2)
{
count=13121;
}
if(a==1)
{
b=n-10000;
count=6561+Count3(b);
}
return count;
}
int Count5(int n)
{
int a,b;
long count=0;
a=n/100000;
if(a>2)
{
count=59049*(a-1);
b=n-a*100000;
count+=Count4(b);
}
if(a==2)
{
count=118097;
}
if(a==1)
{
b=n-100000;
count=59049+Count4(b);
}
return count;
}```