51nod 1009 數字1的數量

2021-08-28 22:24:38 字數 1357 閱讀 7366

給定乙個十進位制正整數n,寫下從1開始,到n的所有正數,計算出其中出現所有1的個數。

例如:n = 12,包含了5個1。1,10,12共包含3個1,11包含2個1,總共5個1。

input

輸入n(1 <= n <= 10^9)
output

輸出包含1的個數
input示例

12
output示例

5
#include #include #include #include using namespace std;

int dp[10][10];

int a[10];

int sum(int pos)

int result = 0;

for (int i = pos; i >= 0; i--)

result++;

return result;

}int dfs(int pos, int state, bool limit)

return 0;

} if (!limit && dp[pos][state] != -1)

int up = limit? a[pos] : 9;

int result = 0;

if (state == 1)

else

}for (int i = 0; i <= up; i++)

if (!limit)

return result;

}int solve(int n)

return dfs(pos - 1, 0, true);

}int main()

方法2:

#include#include#includeusing namespace std;

typedef long long ll;

ll dp[10][10], a[10];

ll dfs(int pos, int num, int limit)

if (!limit && dp[pos][num] != -1)

int up = limit ? a[pos] : 9;

ll result = 0;

for (int i = 0; i <= up; i++)

if (!limit)

return result;

}ll solve(ll x)

return dfs(pos - 1, 0, 1);

}int main(void)

51nod 1009 數字1的數量

1009 數字1的數量 基準時間限制 1 秒 空間限制 131072 kb 分值 5 難度 1級演算法題 收藏 關注 給定乙個十進位制正整數n,寫下從1開始,到n的所有正數,計算出其中出現所有1的個數。例如 n 12,包含了5個1。1,10,12共包含3個1,11包含2個1,總共5個1。input ...

51 nod 1009 數字1的數量

1009 數字1的數量 基準時間限制 1 秒 空間限制 131072 kb 分值 5 難度 1級演算法題 收藏 關注 給定乙個十進位制正整數n,寫下從1開始,到n的所有正數,計算出其中出現所有1的個數。例如 n 12,包含了5個1。1,10,12共包含3個1,11包含2個1,總共5個1。input ...

51nod 1009 數字1的數量

1009 數字1的數量 基準時間限制 1 秒 空間限制 131072 kb 分值 5 難度 1級演算法題 給定乙個十進位制正整數n,寫下從1開始,到n的所有正數,計算出其中出現所有1的個數。例如 n 12,包含了5個1。1,10,12共包含3個1,11包含2個1,總共5個1。input 輸入n 1 ...