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