微信公众号的模板网站,怎样建设一个网站教学,网页qq无法使用快捷登录,活动网站题意#xff1a;这道题开始是卡了很久的#xff0c;题意是给定一个数n然后让你求B进制下n#xff01;有多少个零#xff0c;和有多少位数#xff0c;咋一看#xff0c;是高精度#xff0c;如果数论不是很熟系。思路#xff1a;开始是直接抛弃高精度的一来是存不下…题意这道题开始是卡了很久的题意是给定一个数n然后让你求B进制下n有多少个零和有多少位数咋一看是高精度如果数论不是很熟系。思路开始是直接抛弃高精度的一来是存不下二来没办法短时间计算出来所以单纯高精度是无法解题的提题目就变成了如何使精度和运算降下来的问题了。通过观察比如10为什么末尾有0因为该数含有2*5所以要想求有多少个零只需要求n能分解成多少个进制的问题了等等这问题有点眼熟在数学1专题里就做过一个和这个一模一样的题目因式分解求最小就完了。但是另一个问题随即而来求完了末尾0的个数那n的阶乘的位数该怎么求这一点我就完全没想到后来找了网上的题解才明白是怎么一回事原来可以用对数来保存n的阶乘然后直接打表计算即可用斯特林公式可能会因为误差而wacode#include iostream#include cmath#include cstring#include cstdio#include algorithmusing namespace std;typedef long long ll;const int M0x7fffffff;const int N10010;bool ft[N];int prime[N],t0;double w[120];double ep1e-8;void init() //打素数以及处理阶乘{ memset(ft,true,sizeof(ft)); ft[0]ft[1]false; for (int i2;iN;i) { if (!ft[i]) continue; prime[t]i; for (int j2*i;jN;ji) ft[j]false; } w[0]0; for (int i1;i(120);i) w[i]w[i-1]log(1.0*i);}int many0(int m, ll n) //因式分解{ int i,j; int ansM,p1; while (m1) { int ct0; while (m%prime[p]0) { ct; m/prime[p]; } if (ct0){p; continue;} if (prime[p]n){ans0; break;} int nt0; for (iprime[p];in;i*prime[p]) ntn/i; ansmin(ans,nt/ct); } return ans;}int main(){ init(); ll m; int n; while (cinmn) printf(%d %d\n,many0(n,m),(int)(w[m]/log(1.0*n)1ep));}