计算1到n中的1的个数
来源:互联网 发布:群发短信软件电脑版 编辑:程序博客网 时间:2024/06/05 23:03
b[i]表示n数字从小到大第i位是什么
c[i]表示1到b[i]b[i-1]....1中的1的个数,a[i]表示1到10^i-1中有几个1
sum表示从低位向高位循环过程中累计的值,最后是n
接下来递推
if(b[i]==0) c[i]=c[i-1] 是0的话和前一位的值是一样的
else if (b[i]==1) c[i]=a[i-1]+sum+1+c[i-1] 是1的话 考虑 比如12345 就是0------9999 (a[i-1]) + 10000---12345 中最高位的1(sum+1) + 10000--- 123456中 0000--2345 中的1(c[i-1])
else c[i]=a[i-1]*b[i]+pow(10,i-1)+c[i-1] 大于1的话 考虑 比如22345 就是 0开头(0000--9999)+ 1开头(0000---9999) 先不看最高位 就是 a[i-1]*b[i]
然后 2开头(0000---2345) 就是 c[i-1] 最后看 最高位为1的情况, 只算这个最高位的 pow(10,i-1)
#include<iostream>#include<stdio.h>#include<string.h>#include<algorithm>#include<map>#include<queue>#include<math.h>#include<stack>using namespace std;#define LL long long#define mp(a,b) make_pair((a),(b))#define clr(x,a) memset(x,a,sizeof(x))#define INF 0x3f3f3f3f#define lb(x) ((x)&(-x))#define rep(i,a,b) for(int i=a;i<=b;i++)const int N=1005,siz=1e9;const int MOD=1e9+7;int d,n;int a[10];int b[10];int c[10];int main(){ //freopen("aaa.txt","r",stdin); //freopen("bbb.txt","w",stdout); a[1]=1;a[0]=0; for(int i=2;i<=8;i++){ a[i]=10*a[i-1]+pow(10,i-1); } while(~scanf("%d",&n)){ int num=0; int m=n; while(n){ b[++num]=n%10; n/=10; } int sum=m%10; c[1]=(sum==0?0:1); for(int i=2;i<=num;i++){ if(b[i]==0) c[i]=c[i-1]; else if(b[i]==1) c[i]=c[i-1]+1+sum+a[i-1]; else c[i]=c[i-1]+b[i]*a[i-1]+pow(10,i-1); sum=sum+b[i]*pow(10,i-1); } printf("%d\n",c[num]); } return 0;}
0 0
- 计算1到n中的1的个数
- 计算0到N中包含数字1的个数
- 计算1到N(键入)中9的个数
- 计算1 到 N 之间 某个数字出现的个数
- 写一个函数,计算0到n之间2的个数 (1-9的个数)
- 1到n,n个数的最小公倍数
- 计算从1到n(包括n)之间出现的各位数字的个数
- 给定一个正整数N,从1到N所有整数,计算出现1的个数
- 给定一个正整数N计算从1到N中1出现的个数
- 计算1-n中1的个数
- 计算任意n-1个数的乘积
- 计算从[1,n]的素数个数
- 计算1~n中9的个数
- 给定n,计算二进制0b(0,...,n)中的1的个数
- 计算1到N之间的数字中,1的个数
- 1!+2!+...+30! 计算从1到n个数的阶乘的总和
- 计算正整数1到N中出现的1的个数
- 计算从整数1到n之间,所有1的个数的和
- 如何修改Ubuntu下终端显示的字符
- 信息工程学院 ACM Team 2014年新、老队员寒假训练指南
- getSystemService
- 关于OSG智能指针 osg::ref_ptr 的一些测试
- Js/Jquery获取iframe中的元素
- 计算1到n中的1的个数
- spring启动component-scan类扫描加载过程---源码分析
- 第十六周项目2---用指针万字符串(字符串的连接)
- poj3481Double Queue SBT
- 内存溢出和内存泄漏的区别
- BLE 协议栈之透传从机"Write error 13" 小忧伤
- android无线adb调试
- 求幂
- opencv1-安装及资料