某辆汽车有一个里程表,该里程表可以显示一个整数,为该车走过的公里数。然而这个里程表有个毛病:它总是从3变到5,而跳过数字4,里程表所有位(个位、 十位、百位等)上的数字都是如此

题目要求 ;某辆汽车有一个里程表,该里程表可以显示一个整数,为该车走过的公里数。然而这个里程表有个毛病:它总是从3变到5,而跳过数字4,里程表所有位(个位、 十位、百位等)上的数字都是如此。
/思路:方法1,因为这个公里表跳过了4,所以含有4的都没有被记录,直接跳过了4,所以只要是不含有四的都是实际的公里表
方法2,我们用总的公里数 - 含有四的公里数 = 实际公里数

演示方法1/

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

int main()

{

    int i,n,a,sum=0;

    scanf("%d",&n);// 读取输入的里程表读数  

    int b=n;

        for(i=0;b>0;i++)

        {

            a=b%10;            //从个位开始取每一位的数字

            b/=10;             

            if(a>4)

            {

                sum+=pow(10,i);    //每当数字大于4时便会有个幂次方的差异

                a--;

            }



            sum+=a*(pow(10,i)-pow(9,i));    //累加差值

        }

    printf("%d\n",n-sum);

    return 0;

}

//        100 19  4 14 24 34 44 54 64 74 84 94   //100当中含有多少个需要跳过的4

//        1000    19*4+100+5*19                  //同理可得1000中含有多少

//        10000   (9*19+100)*9+1000              //同理可得10000中含有多少

//        n1=0*9+10^0                            //10       以内跳过的数字      1                      
//        n2=(1)*9+10^1                          //100      以内跳过的数字      19

//        n3=(n2)*9+10^2                         //1000     以内跳过的数字      271

//        n4=(n3)*9+10^3                         //10000    以内跳过的数字      3439



// 举例       155=0+1+3+10+9+10=0+bool*10^0+(5-1)*1+bool*10^1+19
//    bool                   判断该数是否跳过

//    0+bool*10^0            判断个位跳过多少数字                                   

//    (5-1)*1+bool*10^1      判断十位跳过多少数字     

//    19                     判断百位跳过多少数字     


演示方法2/

#include<stdio.h>
int main()
{
    int  n,i;
    int  c=0;//记录实际公里数
    scanf("%d",&n);
    for(i=1;i<=n;i++){
        if(i%10!=4&&(i/10)%10!=4&&(i/100)%10!=4)
            c++;}


       printf("%d",c);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值