2012-10-16 15 views
2

如何檢查Java中BigInteger的每個數字(例如,每個數字爲System.out.println())?除了將其轉換爲字符串之外,還有其他方法嗎?如何檢查Java中BigInteger的每個數字?

+0

的BigInteger的數字很可能不會存儲在基數10中,因此除了檢查字符串表示的字符之外,可能沒有別的辦法。 – maerics

+0

只有字符串可以容納BigInteger可以處理的數字。 –

回答

2

直接的代碼打印從最後一位向第一:

private static void printDigits(BigInteger num) { 
    BigInteger[] resultAndRemainder; 
    do { 
     resultAndRemainder = num.divideAndRemainder(BigInteger.TEN); 
     System.out.println(Math.abs(resultAndRemainder[1].intValue())); 
     num = resultAndRemainder[0]; 
    } while (num.compareTo(BigInteger.ZERO) != 0); 
} 
1

BigInteger API docs似乎沒有提供任何功能。而且,這些數字很可能不是以10爲基數表示的(因爲它效率很低)。因此,檢查BigInteger的十進制數字的唯一方法很可能是查看其字符串表示形式。

+0

可以將bigInteger轉換爲整型數組,然後它也會有幫助 – djscribbles

1

你當然可以用基本的數學來計算每個數字。特別是方法divideAndRemainder可能對此有所幫助。但我懷疑,這比轉換成字符串和檢查字符更有效。 BigInteger數學畢竟比數學更昂貴intlong數學。

0

我認爲你可以做到這一點的唯一方法是將其轉換爲字符串並驗證每個字符。這裏有一個例子:

BigInteger bigInteger = new BigInteger("123"); 
String bigIntegerValue = bigInteger.toString(); 
for(int i = 0; i < bigIntegerValue.length(); i++) { 
    System.out.println(bigIntegerValue.charAt(i)); 
} 
-1

似乎很簡單,你需要做的得到一個數字的每個數字是什麼。 創建一個循環,跟蹤您的數字是否大於十,然後在其上執行mod 10操作,然後除以十。

while (num >10) 
{ 
    System.out.println(num%10); 
    num = num/10; 

} 
+0

對於'BigInteger',您需要使用方法'mod','divide','compareTo'而不是運算符。但原則上是有效的。 –

+0

Opps我將修復 – RGdev

+0

您還需要適應高位數字。 –

0

也許你可以嘗試檢查使用BitSet你這樣的BigInteger的每一位,

BitSet bitSet = BitSet.valueOf(bigInteger.toByteArray()); 
相關問題