词条 | n! |
释义 | 阶乘符号 n!=1x2x3...xn 1751年,欧拉以大写字母M表示m阶乘 M=1x2x3...x...m 1799年,鲁非尼在他出版的方程论著述中,则以小写字母π表示m阶乘,而在1813年,高斯则以Π(n)来表示n阶乘。而用来表示n阶乘的方法起源于英国,但仍未能确定始创人是谁。直至1827年,由于雅莱特的建议而得到流行,现在有时也会以这个符号作为阶乘符号。 而最先提出阶乘符号n!的人是克拉姆(1808),后来经过欧姆等人的提倡而流行,直至现在仍然通用。 HDU 上与N!相关的两个题目:Leftmost Digit:题意:给一个正整数N(1<=N<=1,000,000,000),输出N^N最左边的数字. N=3时,3 * 3 * 3 = 27, 最左边的数字是 2. N=4时,4 * 4 * 4 * 4 = 256, 最左边的数字是 2. 思路:N^N是一个整数,可以表示成一个小数乘以10^(k-1),即N^N=frist.xxxxx*10^(k-1). frist.xxxxx=N^N/10^(k-1)=10^(log_10(N^N-(k-1))).对于10的整数次幂frist=1,所以当log_10(N^N-(k-1))中存在小数时,frist=(int)1*pow(10,小数部分)! 小数部分=log_10(N^N-(k-1))-(long long)(log_10(N^N-(k-1))); 公式:frist =(int)pow(10.0, (n*log10(n) – (long long)(n*log10(n))))! Last non-zero Digit in N!题意:给一个正整数N(N为大整数),输出最右边非零的数字.代码:01 //大整数以string的形式传入 02 int Last_nonzero_Digit_in_N(string str){ 03 int mod[20] = {1, 1, 2, 6, 4, 2, 2, 4, 2, 8, 4, 4, 8, 4, 6, 8, 8, 6,8, 2}; 04 int a[1000]; 05 int i, c, t=1, len=str.length(); 06 for (i = 0; i < len; i++) 07 a[i] = str[len - 1 - i] - ’0′; 08 while (len) { 09 len -= !a[len - 1]; 10 t = t * mod[a[1] % 2 * 10 + a[0]] % 10; 11 for (c = 0, i = len - 1; i >= 0; i–) 12 c = c * 10 + a[i], a[i] = c / 5, c %= 5; 13 } 14 return t; 15 } |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。