程序设计之寻找数列中的1

一、题目

给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数。
要求:
写一个函数 f(N) ,返回1 到 N 之间出现的 “1”的个数。例如 f(12)  = 5。
在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少。
二。设计思路
我打算寻找一种通用算法,能算所有数的算法。具体是,对于各个数位的1做分别计算,比如个位的1是最大数N/10的商乘上1加上对于余数的判断;而十位的1是最大数N/100*10加上对于两位余数的判断,以此类推就能推广到所有数,但是我目前还未实现,先附上大致代码思路(PS:结果并不正确)
三、代码
#include<iostream.h>
int f(int N)
{
    int x,y,sum=0,fu=1;
    do{
        x=N/(fu*10);
        y=N%(fu*10);
        if(x==0)
        {
            if(y>fu)
            {
                sum=sum+fu;
            }
        }
        sum=sum+x*fu;
        fu=fu*10;
    }while(x>0);
    return sum;
}
void main()
{
    int N=10;
    cout<<f(N);
}

 

posted on 2015-04-30 15:19  菠萝吃么  阅读(145)  评论(0编辑  收藏  举报

导航