2016-11-17 42 views
1

我試圖將C++代碼移植到Ruby。 運行腳本會給我一個「執行超時」錯誤。Ruby程序:第n個冪尾隨零的因數

這是Ruby代碼:

t = gets.to_i 
t.times do 
    a = gets.to_i 
    b = gets.to_i 
    c = 0 
    j = 5 
    until j <= a do 
     j*5 
     c += a/j 
    end 
    puts c*b 
end 

這是C++代碼:

#include<iostream> 

main() 
{ 
    long t, a, b, i = 0, j, c; 
    std::cin >> t; 
    for(; i < t ; i++) 
    { 
    std::cin >> a >> b; 
    c = 0; 
    for(j = 5 ; j <= a ; j *= 5) 
     c += a/j; 
    std::cout << c * b << '\n'; 
    } 
} 

我的輸入是:

2 
100 
10 
5 
4 

任何我的輸出是:

240 
4 

有兩種測試情況:

  1. 零的(100!)^10
  2. 尾隨零的(5!)^4
+2

您需要聲明一個問題。另外,預期輸出的例子會有所幫助。感謝 –

+1

注意縮進問題,並且你的循環與C++相比,在ruby程序中是相互依賴的。你的程序在輸入1 10時工作得很好。但是其他的,它正在進行折騰。 – Vasif

+0

在ruby示例中,您沒有將'j * 5'指定回'j' – David

回答

2

尾隨號碼,我會寫的計算在Ruby這樣的數字:

a = 100 
b = 10 
((1..a).inject(:*)**b).to_s[/0*$/].size 
#=> 240 

其中(1..a).inject(:*)計算a!,**b是指數函數,to_s將數字轉換爲字符串,[/0*$/]提取所有的尾隨零並size計數它們...