您的位置:首页 > 其它

51nod数字1的数量

2017-06-19 19:04 190 查看

这道题瞎jbyy了很久 方法可能很奇怪...

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define LL long long
using namespace std;
int n,ans;
int f[35][10],w[11];
void init(){
w[1]=1;
for(int i=2;i<=10;i++) w[i]=w[i-1]*10;
f[1][1]=1;
for(int i=2;i<=10;i++)
for(int j=0;j<=9;j++){
for(int k=0;k<=9;k++)f[i][j]+=f[i-1][k];
if(j==1) f[i][j]+=w[i];
}
//for(int i=1;i<=10;i++,printf("\n")) for(int j=0;j<=9;j++) printf("%d ",f[i][j]);
}
int main()
{
init();
int sum=10,ans=0,v,k,tot=2;
scanf("%d",&n); k=n;
while(w[sum]>n) sum--;
int now=n/w[sum];
for(int i=0;i<now;i++) ans+=f[sum][i];
n=n%w[sum];
for(int i=sum-1;i;i--){
v=n/w[i];
for(int j=0;j<v;j++) ans+=f[i][j];
n=n%w[i];
}
v=k;
if(k%10==1) ans++;
v=v/10;
while(tot<=sum){
if(v%10==1) ans=ans+k%w[tot]+1;
tot++; v=v/10;
}
printf("%d\n",ans);
return 0;
}
View Code

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: