• 编程练习:1的数目


    • 来源: 编程之美
      给定一个十进制正整数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;

    分析

    具体分析见图

    实现

    
    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;
        }
    
    }
    
    

    此致,敬礼

  • 相关阅读:
    第12讲:数据库完整性
    第11讲:视图及其应用
    第10讲:利用SQL语言实现关系代数操作
    ArcEngine 坐标系转换
    [转]ArcGIS计算图斑的四邻坐标(XMin,XMax,YMin,YMax)
    oracle11g 修改字符集 修改为ZHS16GBK
    Oracle 全文索引相关命令
    SQL语句 递归
    流量操控之SSH隧道与端口转发
    VIM 常用操作
  • 原文地址:https://www.cnblogs.com/numen-fan/p/10139912.html
Copyright © 2020-2023  润新知