表示式展開-LintCode
1、給出兩個數 A 和 B, 其中 B >= A. 我們需要計算結果 F 的最後一位數是什麼, 其中F = B! / A!(1 <= A, B <= 10^18, A 和 B 非常大)(難度:中等)【建議時間:40分鐘】
樣例 :
給出 A = 2, B = 4, 返回 2
A! = 2 以及 B! = 24, F = 24 / 2 = 12 –> 最後一位數為 2
注意程式設計風格。(比較關注這個,我們認為這和你工作中程式碼質量有較強關聯)
————————————————————————————————————
思路:
階乘除法B! / A!的本質是B * B-1 * … * A+1,要想獲得末尾數字,只需要計算這個算式本身的末位數字的運算即可,且當B - A >= 10的時候,結果必為0(因為B比A大10以上則證明上述算式必包含一個數為10的倍數,則乘積結果必為10的倍數,也就是最後一位為0)
當B - A的結果在10以內時,考慮到乘積結果仍然可能超過long的範圍,我們仍需選取最後一位進行運算. 這時候我們又有兩種情況需要討論:
①B的末位數字小於A(讓Btemp = B末位數字 + 10)
②B的末位數字大於A(正常處理)
答案:
public class Solution {
public int computeLastDigit(long A, long B) {
if (B - A >= 10) {
return 0;
}
long Atemp = A % 10;
long Btemp = B % 10;
if(Atemp > Btemp){
Btemp += 10;
}
long ret = 1;
for (long i = Btemp; i > Atemp; i--) {
ret *= i;
}
return (int) (ret % 10);
}
public static void main(String[] args) {
long A = 123213125l;
long B = 123213129l;
System.out.println(“輸入引數:A=”+A +“,B=”+B);
System.out.println(new Solution().computeLastDigit(A,B));
}
}
相關文章
- 二項式展開公式公式
- 【開發篇sql】 條件和表示式(八) 10g 正規表示式SQL
- 表示式
- 多元函式的泰勒(Taylor)展開式函式
- 函式的冪級數展開式函式
- python--表示式(運算表示式)Python
- 【JavaEE】JSP表示式--EL表示式用法JavaJS
- 開心檔之MySQL 正規表示式MySql
- 中綴表示式轉為逆波蘭表示式
- JavaScript 表示式JavaScript
- JavaScript表示式JavaScript
- 表示式樹
- lambda表示式
- lambda 表示式
- cron表示式
- C#中的Lambda表示式和表示式樹C#
- 從 例子 開始 入門 正則 表示式(-)
- 15.5 函式的冪級數展開式函式
- javascript-函式表示式JavaScript函式
- 函式表示式–遞迴函式遞迴
- quartz.net 時間表示式----- Cron表示式詳解quartz
- Java | Lambda表示式Java
- JavaScript短路表示式JavaScript
- SQL CASE 表示式SQL
- Lambda表示式(Java)Java
- java lambda 表示式Java
- JavaFX教程-表示式Java
- 八,Lambda表示式
- 三目表示式
- 中綴表示式
- Java Lambda表示式Java
- 3.2.5 表示式求值
- 正規表示式
- Web 前端開發之js正規表示式用法Web前端JS
- 一文掌握開發利器:正規表示式
- Android中如何使用Lambda表示式高效開發Android
- [轉]Java 8 的 lambda 表示式 Java 8 的 lambda 表示式Java
- Oracle正規表示式函式Oracle函式