從1到n的正數中1出現的次數

題目:輸入一個整數n,求從1到n這n個整數的十進制表示中1出現的次數。

例如輸入12,從1到12這些整數中包含1 的數字有1,10,11和12,1一共出現了5次。

利用動態規劃的思想,每次往前進行增加。代碼如下:

#include<iostream>
using namespace std;


int Countdatanum(int n)
{
	int Data[10] = {0};
	int i = 0;
	int k = 10;
	int length;
	int temp;
	int sum = 0;
	int value = n;
	while(value != 0)
	{
		Data[i] = value % k;
		value /= 10;
		i++;
	}
	length = i;

	if(Data[0] > 0)
		Data[0] = 1;
	int pre = 1;
	sum += Data[0];
	for(i = 1; i < length; i++)
	{
		if(Data[i] > 1)
		{
			sum += pre * Data[i] + k;
		}
		else if(Data[i] == 1)
		{
			sum += pre * Data[i]; 
			sum += n % k + 1;
		}
		else
			Data[i] = 0;

		pre = pre * 10 + k;
		k *= 10;
	}
	
	return sum;
}

int NumberOf1(unsigned int n)
{
      int number = 0;
      while(n)
      {
            if(n % 10 == 1)
                  number ++;

            n = n / 10;
      }

      return number;
}

int NumberOf1BeforeBetween1AndN_Solution1(unsigned int n)
{
      int number = 0;

      // Find the number of 1 in each integer between 1 and n
      for(unsigned int i = 1; i <= n; ++ i)
            number += NumberOf1(i);

      return number;
}



int main()
{
	cout<<Countdatanum(203)<<endl;
	cout<<NumberOf1BeforeBetween1AndN_Solution1(203)<<endl;
	return 0;
}


發佈了63 篇原創文章 · 獲贊 23 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章