善用Log來取位數(以10為底)
別把數字乘出來再來取位數
小提示:log(A*B)=logA+logB
log(A/B)=logA-logB
小技巧: 10!
5! * 5!
= 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2
5 * 4 * 3 * 2 * 5 * 4 * 3 * 2
=>Log(10)+Log(9)+Log(8)+Log(7)+Log(6)-Log(5)-Log(4)-Log(3)-Log(2)
=>2.4XXXXXX
=>3位數
善用Log來取位數(以10為底)
別把數字乘出來再來取位數
小提示:log(A*B)=logA+logB
log(A/B)=logA-logB
小技巧: 10!
5! * 5!
= 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2
5 * 4 * 3 * 2 * 5 * 4 * 3 * 2
=>Log(10)+Log(9)+Log(8)+Log(7)+Log(6)-Log(5)-Log(4)-Log(3)-Log(2)
=>2.4XXXXXX
=>3位數
用同樣的方法 可是TLE了
善用Log來取位數(以10為底)
別把數字乘出來再來取位數
小提示:log(A*B)=logA+logB
log(A/B)=logA-logB
小技巧: 10!
5! * 5!
= 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2
5 * 4 * 3 * 2 * 5 * 4 * 3 * 2
=>Log(10)+Log(9)+Log(8)+Log(7)+Log(6)-Log(5)-Log(4)-Log(3)-Log(2)
=>2.4XXXXXX
=>3位數
用同樣的方法 可是TLE了
C 10取2 等於 C 10取8
找計算少的那個算
前者 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 / 8 / 7 / 6 / 5 / 4 / 3 / 2
後者 10 * 9 / 2
善用Log來取位數(以10為底)
別把數字乘出來再來取位數
小提示:log(A*B)=logA+logB
log(A/B)=logA-logB
小技巧: 10!
5! * 5!
= 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2
5 * 4 * 3 * 2 * 5 * 4 * 3 * 2
=>Log(10)+Log(9)+Log(8)+Log(7)+Log(6)-Log(5)-Log(4)-Log(3)-Log(2)
=>2.4XXXXXX
=>3位數
用同樣的方法 可是TLE了
public static long combination(long n, long k) { double result = 0; for (long i = n; i > Math.max(n - k, k); --i) { result += Math.log10(i); } for (long j = Math.min(n - k, k); j > 1; --j) { result -= Math.log10(j); } return (long) (result + 1); }