求出1-n的整数中,1出现的次数,例如,1-13中1出现6次。

/*

解题思路:求出n的每一位,包括个位十位百位千位等位置1出现的次数相加即可。以1111为例,个位上出现1的次数为111+1次,111为个位1前面的三位数字。(在简单一点就是如91,个位出现的次数为9+1,1,11,21,32,41,51,61,71,81,91),十位上1出现的个数为n/100*10(每过100的时候,10位上的1就会多10个,) ,当十位不满20的时候便%10取余数相加即可。百位千位同理,就不在赘述。上代码


*/

这是逻辑代码

class Solution {
public:
    int NumberOf1Between1AndN_Solution(int n){  
        int ones = 0;
        for (long long m = 1; m <= n; m *= 10)
            ones += (n/m + 8) / 10 * m + (n/m % 10 == 1) * (n%m + 1);
         return ones;
     
    }
}

这是实现后的代码

public class test {
    public static void main(String[] args){

          int s= testt(1111);

        System.out.println(s);
    }
    public  static  int testt(int n) {
        int x=0;
        int num = 0;
        for (int i = 1; i <= n; i *= 10) {

            num += ((n / i + 8) / 10) * i + s(n,i) * (n % i + 1);


            System.out.println( "这次第"+(++x)+"次"   +  ((n / i + 8) / 10) * i );

            System.out.println( "这次第"+x+"次"   +  s(n,i) * (n % i + 1) );

        }




        return num;
    }

    public  static int s(int n,int i){

      if((n / i % 10 == 1)){
          return 1;
      }
          return 0;
    }



}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值