程序设计之寻找数列中的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);

}

 

你可能感兴趣的:(程序设计)