zoukankan      html  css  js  c++  java
  • 整数找一

    一 问题说明

    给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数。
    要求:
    写一个函数 f(N) ,返回1 到 N 之间出现的 “1”的个数。例如 f(12)  = 5。
    在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少。

    二 设计思路

          通过分析,发现可以将这个数中每位数分开讨论,比如327,1-327先讨论个位上出现1的个数,然后十位,最后是百位,最后将它们相加,最后可以得到最终结果。每一位上出现1的个数都是与相邻位上的数息息相关的。

    三 代码实现

    #include<iostream>
    #include<math.h>
    using namespace std;
    
    void find(int n)
    {
    	int m=n,a,b,c,s=0,p=0;
    	double k=0;
    	while(m/10!=0)
    	{
    		a=m/10;
    		b=m%10;
    		if(k==0)
    		{
    			if(b==0) s=s+a;
    			else s=s+a+1;
    		}
    		else
    		{
    			if(b==1)
    			{
    				s=s+(n/pow(10,k+1))*10+n%(int)pow(10,k);
    			}
    			else if(b==0)
    			{
    				s=s+n/pow(10,k);
    			}
    			else
    			{
    				p=n/pow(10,k+1);
    				s=s+(p+1)*10;
    			}
    		}
    		m=m/10;
    		k++;
    	}
    	if(m==1)
    	{
    		c=n-m*pow(10,k);
    		s=s+c+1;
    	}
    	else
    	{
    		c=pow(10,k);
    		s=s+c;
    	}
    	cout<< s;
    }
    
    void main()
    {
    	int i;
        cout<<"请输入一个数:";
        cin>>i;
        find(i);
    }
    

    四 截图

    五 总结

            这个问题困扰了很久,毫无头绪。最后还是得需要思考,一步一步找规律才能将问题解决,所以要将问题分析透彻,就需要一步步地找规律,然后才可以总结出一套完整的解决方案。

  • 相关阅读:
    OpenUrl 的跨平台实现
    通用性站点管理后台(Bee OPOA Platform)
    使用Lucene.net提升网站搜索速度整合记录
    ASP.NET MVC相关
    LeetCode:Copy List with Random Pointer
    ASP.NET交互Rest服务接口(Jquery的Get与Post方式)
    How to Prevent Cross-Site Scripting Attacks
    高性能网站建设指南
    异常
    soket.io.js + angular.js + express.js(node.js)
  • 原文地址:https://www.cnblogs.com/houtaoliang/p/4549373.html
Copyright © 2011-2022 走看看