1~n中1的和

题目:给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数;

要求:写一个函数fn),返回1n之间出现“1“的个数,

思路:

1、先判断这个数共多少位,假设为n位;

2、判断哪一位上数为1

3、在判断最高位上的数;

思路:

   将输入的数n分解开看,看每一位数上出现的1的个数,

1、当n为一位数时:

n小于1时,和为0

n大于等于1;和为1

2、当n为两位数时:例如n19

个位出现的1的个数为2

十位出现的1的个数为10

3、当n为三位数时:例如n119

个位出现的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;

}

截图:

总结:

将输入的数进行分解,即可解决问题

原文地址:https://www.cnblogs.com/mingning/p/4551424.html