题目:
一台打字机准备将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; }