题意:求有多少个满足第i为数不为i且不含前导0的n位数
思路:第1位有8种情况(除了0,1),2-9位有9种情况,10位以上每位有10种情况,大于9以后只要往后面加0就是了,或者用大数乘的模板也可以
AC代码:
#include "iostream" #include "string.h" #include "stack" #include "queue" #include "string" #include "vector" #include "set" #include "map" #include "algorithm" #include "stdio.h" #include "math.h" #define ll long long #define bug(x) cout<<x<<" "<<"UUUUU"<<endl; #define mem(a) memset(a,0,sizeof(a)) using namespace std; const int N=1e5+100; /////2016-2017 ACM-ICPC, NEERC, Central Subregional Contest string Multiply(string s,int x) { reverse(s.begin(),s.end()); int cmp=0; for(int i=0;i<s.size();i++) { cmp=(s[i]-'0')*x+cmp; s[i]=(cmp%10+'0'); cmp/=10; } while(cmp) { s+=(cmp%10+'0'); cmp/=10; } reverse(s.begin(),s.end()); return s; } string ans="8"; int main(){ freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); cin>>n; for(int i=2; i<=n; ++i){ if(i<10) ans=Multiply(ans,9); else ans=Multiply(ans,10); } cout<<ans; return 0; }