博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编程练习:1的数目
阅读量:5231 次
发布时间:2019-06-14

本文共 1369 字,大约阅读时间需要 4 分钟。

  • 来源: 编程之美

    给定一个十进制正整数N,写下从1开始,到N的所有整数,然后数一下其中出现的所有"1"的个数。
    例如:

    N = 2,写下1,2。这样只出现了1个"1"

    N = 12, 1,2,3,4,5,6,7,8,9,10,11,12。这样1的个数为5;

    分析

具体分析见图

5c18eb75c6408.png
5c18eb7521b7e.png

实现

import java.util.Scanner;public class Main {    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        while (scanner.hasNext()) {            System.out.println(Sum1s(Long.parseLong(scanner.next())));        }    }    public static long Sum1s(long n) {        long iCount = 0;    //        long iFactor = 1;   // 个十百千万        long iLowerNum = 0; // 低位数字 比如12123,以百位1为界,低位数字为23        int iCurrNum = 0;   // 每一位上的数字,取值0-9        long iHigherNum = 0;    // 高位数字,类似上面        while (n / iFactor != 0) {            iLowerNum = n - (n / iFactor) * iFactor;    // 获得高位数字            iCurrNum = (int)(n / iFactor) % 10; // 获得当前位数字            iHigherNum = n / (iFactor * 10);    // 获得高位数字            switch (iCurrNum) {                case 0 :                    iCount += iHigherNum * iFactor; // 高位 * 当前位数                    break;                case 1:                    iCount += iHigherNum * iFactor + iLowerNum +1;  //                    break;                default:                    iCount += (iHigherNum + 1) * iFactor;                    break;            }            iFactor *= 10;        }        return iCount;    }}

此致,敬礼

转载于:https://www.cnblogs.com/numen-fan/p/10139912.html

你可能感兴趣的文章
WSDL 详解
查看>>
[转]ASP数组全集,多维数组和一维数组
查看>>
C# winform DataGridView 常见属性
查看>>
逻辑运算和while循环.
查看>>
Nhiberate (一)
查看>>
c#后台计算2个日期之间的天数差
查看>>
安卓开发中遇到的小问题
查看>>
ARTS打卡第3周
查看>>
linux后台运行和关闭SSH运行,查看后台任务
查看>>
cookies相关概念
查看>>
CAN总线波形中ACK位电平为什么会偏高?
查看>>
MyBatis课程2
查看>>
桥接模式-Bridge(Java实现)
查看>>
svn客户端清空账号信息的两种方法
查看>>
springboot添加servlet的两种方法
查看>>
java的Array和List相互转换
查看>>
layui父页面执行子页面方法
查看>>
如何破解域管理员密码
查看>>
Windows Server 2008 R2忘记管理员密码后的解决方法
查看>>
IE11兼容IE8的设置
查看>>