题目:
一台打字机准备将1到10^n的数依次打出。在打印过程中,这台打字机出现了一个故障:数字“3”打不出来。因此,所有含有数字“3”的数都没有被正确地打出。试问没有被正确打出的数一共有多少个。
输入:
输入一个正整数n。 n<=1000;
输出:
输出从1到10^n这些数中不能被正确打印的数的个数。
思路:
eg:
n=1时:10-1*9=1;
n=2时:100-9*9=19:;
n=3时: 1000-9*9*9=271;
代码:
#include<iostream>
#include<string>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
using namespace std;
int main()
{
int x,shu,n,lena,lenb,len;
int a[2333]={0},b[2333]={0};
cin>>n;
b[1+n]=1;
a[1]=1;
lenb=1+n;
lena=1;
for(int z=1;z<=n;z++)
{
x=0;
for(int j=1;j<=lena;j++)
{
a[j]=a[j]*9+x;
x=a[j]/10;
a[j]=a[j]%10;
}
a[lena+1]=a[lena+1]+x;
if(x!=0)
{
lena++;
}
}
for(int i=lenb;i>=1;i--)
{
b[i]=b[i]-a[i];
int j=i;
while(b[j]<0)
{
b[j]=b[j]+10;
b[++j]--;
}
}
while(b[lenb]==0)
lenb--;
for(int i=lenb;i>0;i--)
cout<<b[i];
return 0;
}