1.设计思想

 对于一个整数来说,每一位如十位、百位、千位等出现1的次数根据该位数上的数值及其低位或高位影响。当该位数上的数为0时,出现1的次数可能由高位决定,等于高位数字与当前位数相乘;当该位数上的数为1时,出现1的次数受高位和低位影响,及等于高位数字与当前位数相乘并加上低位数字再加1;当该位数上的数大于1时,出现1的次数只由高位决定,及等于高位数字加1后乘上当前位数。通过循环控制每一次的判断,当前位数不断增加。

2.源程序

#include <iostream>
using namespace std;

int f(int N)
{
    int m=0,n=1;
    int a,b,c;
    while(N/n!=0)
    {
        a=N-(N/n)*n;
        b=(N/n)%10;
        c=N/(n*10);
        if(b==0)
        {
            m+=c*n;
        }
        else if(b==1)
        {
            m+=c*n+a+1;
        }
        else
        {
            m+=(c+1)*n;
        }
        n=n*10;
    }
    return m;
}

void main()
{
    int num;
    cout<<"请输入一个十进制的整数:"<<endl;
    cin>>num;
    cout<<"从1到"<<num<<"的所有整数中,1的个数为:"<<f(num)<<endl;
}


3.结果截图

4.总结

 主要是要找到规律,一开始没有很好的找到规律,当通过不断的用整数进行寻找规律,而当规律找到时,总结规律也是很重要的,分析规律进行最后的总结,用表达式进行表示,能够实现计算。

posted on 2015-06-05 00:09  menghuanzhixing  阅读(303)  评论(0编辑  收藏  举报