数字8

不超过N位的正整数中包含有多少数字8?

输入格式
一行1个正整数N,范围[1,16]。

输出格式
一个整数。


  • 一开始思路:反着算出含8的数的个数———— 所有数 - 不含任何8的数:(10^n - 1) - (9^n - 1),但是一个含8数字到底包含几个8,不好确定。

  • 转换思路,按照8出现的次数分开推导:

    • 只含1个8的数:

      C(n,1)->n位数中,选一个当8
      9^(n-1)->剩下n-1位,每一位9种选择
      此时共有1×C(n,1)×9^(n-1) 个8

    • 只含2个8的数:

      C(n,2)×9^(n-2)
      其中每个数都含有2个8,故此时共有2×C(n,2)×9^(n-2)个8

    • 只含i个8的数:

      C(n,i)×9^(n-i)
      其中每个数都含有i个8,故此时共有i×C(n,i)×9^(n-i)个8


#include<bits/stdc++.h>
using namespace std;
long long f(int x) {
long long t=1;
for(int i=1;i<=x;i++){
t*=i;
}
return t;
}
long long c(int m, int n) {
return f(m)/(f(n)*f(m-n));
}
int main() {
int n;
cin>>n;
long long s=0;
for(int i=1; i<=n; i++) {
long long C=c(n,i);
long long x=i*C*pow(9, n-i);
s+=x;
}
cout<<s;
return 0;
}

posted on   可爱楷玩算法  阅读(90)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示