1~n中1的和
题目:给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数;
要求:写一个函数f(n),返回1到n之间出现“1“的个数,
思路:
1、先判断这个数共多少位,假设为n位;
2、判断哪一位上数为1;
3、在判断最高位上的数;
思路:
将输入的数n分解开看,看每一位数上出现的1的个数,
1、当n为一位数时:
当n小于1时,和为0;
当n大于等于1;和为1;
2、当n为两位数时:例如n为19
个位出现的1的个数为2;
十位出现的1的个数为10;
3、当n为三位数时:例如n为119
个位出现的1的个数为:12;
十位出现的1的个数为:20;
百位出现的1的个数为:20
代码:
#include<iostream>
using namespace std;
void main ()
{
int n;
int i=1;
int count =0;
int c=0,a =0,b =0;
cout<<"输入n的值:";
cin>>n;
while((n / i) !=0)
{
c = (n / i) %10;
b= n / (i *10);
a = n - (n / i) * i;
cout<<c<<" "<<b<<" "<<a<<endl;
if (c >1)
count = count + (b +1) * i;
else
if (c ==0)
count = count + b * i;
else
if(c ==1)
count = count + b * i + a +1;
i = i *10;
}
cout<<count<<endl;
}
截图:
总结:
将输入的数进行分解,即可解决问题