我的垃圾代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int num,i;
int a,a1,a3,a4; //与最高位有关的数据计算
int b,b1; //与 虚假里程有关的数据计算
scanf("%d",&num);
a=num;
for (a1=1;a<0;a1++)
{
a=a/10; //算出位数
}
a3=1;
a4=a1; //这个玩意是位数,这个非常重要
while (a1>0)
{
a3=a3*10;
a1=a1-1;
}
if (num>4*a3)
num=num-a3; //最高位是否要减去(去虚假里程
for (i=a4;i>=1;i--)
{
b=num/a3; // 这个位数值是将要减去的
b1=b*10%10;
if(b1>4)
b=b+1;
num=num-a3/10*b;
a3=a3/10;
}
if (num%10>4)
num=num-1;
printf("%d",num);
return 0;
}
别人的代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int num,i;
int kil;
scanf("%d",&num);
kil=0;
for (i=1;i<=num;i++)
{
if (i/100%10==4)
continue;
if (i/10%10==4)
continue;
if (i%10==4)
continue;
if (i==4)
continue;
kil+=1;
}
printf("%d",kil);
return 0;
}
总结:思路打不开,不知道continue的用处吃了大亏