題目:輸入一個整數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;
}