2016-09-15 133 views
0

在我的AP計算機科學課上,我們正在進行算法分配。我們只能使用數據類型boolean,doubleint。我們不能使用任何Java類來處理數據類型或數學庫(換句話說,我們必須從頭開始構建所有東西)。我已經有了確定給定整數的位數(length(int))和計算功率(power(double base, int exponent))的工作方法。我相信這些將是我堅持使用的一種算法所必需的。這些算法描述如下:如何將數字的數字放入整數數組中?

寫方法findDigit(INT NUM,INT N),返回從一個給定整數 其中n是一個正整數的右邊的第n個數字。例如, findDigit(30568,2)將返回6, findDigit(234.5)將返回0, findDigit(-4532,3)將返回5

我打算使用的字符串類直到我意識到我不被允許。這隻能使用數學運算來完成。如果你們中的一個人可以給我關於如何製作一個包含整數數字的數組的邏輯,那麼我很樂意從那裏開始。我寧願使用邏輯代碼(所以我可以練習編寫代碼),但是使用C++或java編寫的代碼也不錯。

我有一些代碼,我認爲會工作,但最終沒有工作。如果需要的話,我可以提供。

在此先感謝!

+5

提示:你可以用整數除法和mod運算符來做到這一點。 – hatchet

+0

而你正在查找數字的數字是10 ...... –

+1

FlareCat,你爲什麼接受一個返回錯誤結果的答案? – Andreas

回答

-2

下面是一些僞代碼:

int findDigit(int num, int n) { 

    for (i = 0; i < n-1; i++) { 
    num = num/10; 
    } 

    return num % 10; 
} 
+0

如果'10 ^(n-1)> num',你可以檢查一個初始條件,這樣對於大'n'值,你不會循環所有迭代(立即返回0)。只是爲了表演。如果你總是控制'n'的值,不要檢查它。 –

+3

我不認爲Stack Overflow應該是一個「爲我做作業」的網站。這不是僞代碼 - 這是Java,只有一個容易修正的編譯錯誤。你沒有幫助OP爲他們做任務。 –

+2

供其他人閱讀本答案。它不會爲所有輸入返回正確的結果。問題列出了3個樣本輸入,並且這個答案在33%中失敗。 – Andreas

-2

我向您展示的過程。這裏是代碼(使用c#和.net框架庫)

private int findDigit(int num, int n) 
    { 
     string result = string.Empty; 

     int unsigned = Math.Abs(num); //To get th absolute value of num 
     string str = unsigned.ToString();//Convert the (absolute value) to string 
     int index = str.Length - n;  //Index of the desired digit 

     try 
     { 
      result = str.Substring(index, 1);  
     } 
     catch 
     { 
      result = "0"; 
     } 

     int digit = Convert.ToInt32(result); //To Convert the result into int 

     return digit; 
    } 
+1

OP已經說過'ToString()'是不允許的:*「我打算使用字符串類,直到我意識到我不被允許。」* – Andreas

+0

沒有ToString()方法,它不可能獲得int的長度或c#中數字的索引。所以我無法幫助你。 – Pavel

+2

@Pavel我覺得這很難相信。我不是C#程序員,但我懷疑你會發現它支持分割和模數運算。 –