Solution 1: straightforward
static int Fact(int n) { var ret = 1; for(var ii = 2; ii <= n; ++ii) { ret *= ii; } return ret; }Solution 2: oneliner
static int Fact(int n) { return Enumerable.Range(1,n).Aggregate(1,(x,y) => x*y); }Solution 3: recursion
static int Fact(int n) { return n == 0 ? 1 : n*Fact(n-1); }Solution 4: hidden multiplication
static int Fact(int n) { var sb = new StringBuilder("*"); for(var ii = 1; ii < n; ++ii) { var str = sb.ToString(); for(var jj = 0; jj < ii; ++jj) { sb.Append(str); } } return sb.Length; }Solution 5: query comprehension abuse #1
static public int Fact(int n) { if (n == 0) return 1; return from n1 in n where n1 - 1 select n1*n; } static public int Where(this int n, FuncSolution 6: brute-forcef) { return f(n); } static public int Select(this int n1, Func f) { return f(Fact(n1)); }
static public int Included(int n, int k) { if (k<=1) return 0; if (n < k) return 0; return (n / k) + Included(n/k, k); } static public int Fact(int n) { if(n == 0) { return 1; } for(int ii = n, jj; ; ++ii) { for(jj = 2; jj <= n; ++jj) { for(int kk = 0, temp = ii; kk < Included(n,jj); ++kk) { if(temp != jj*(temp /= jj)) { jj = n+1; break; } } } if(jj == n+1) { return ii; } } }
No comments:
Post a Comment