2012-07-20 18 views
9

बड़े पूर्णांक वाले a%b का उपयोग कैसे करें? % ऑपरेटर जावा में बिगइंटर के लिए

तरह
... 
BigInteger val = new BigInteger("1254789363254125"); 
... 

boolean odd(val){ 
    if(val%2!=0) 
     return true; 
    return false; 
... 

ग्रहण का कहना है कि ऑपरेटर% BigInteger के लिए अपरिभाषित है।

कोई विचार?

+3

BigInteger javadoc में 'mod' फ़ंक्शन पर नज़र डालें। –

उत्तर

19
इस तरह

:

BigInteger val = new BigInteger("1254789363254125"); 
public boolean odd(BigInteger val) { 
    if(!val.mod(new BigInteger("2")).equals(BigInteger.ZERO)) 
     return true; 
    return false; 
} 

या के रूप में उपयोगकर्ता डंकन एक टिप्पणी में सुझाव दिया है, हम बाहर अगर बयान को पूरी तरह तो तरह ले जा सकते हैं:

BigInteger val = new BigInteger("1254789363254125"); 
public boolean odd(BigInteger val) { 
    return !val.mod(new BigInteger("2")).equals(BigInteger.ZERO)); 
} 
+0

यदि वैल% 2 == 0 इसकी एक संख्या भी है, अजीब नहीं है। –

+0

धन्यवाद, विस्मयादिबोधक बिंदु भूल गया। – jrad

+0

यदि कोई कथन के लिए कोई ज़रूरत नहीं है, तो बस 'वापसी! Val.mod (नया BigInteger ("2")) बराबर है (BigInteger.ZERO); '। –

1

val.mod (2) का उपयोग करें।

BigInteger एक वस्तु है। आप ऑब्जेक्ट्स पर अंकगणितीय ऑपरेटरों का उपयोग नहीं कर सकते हैं, जो केवल प्राइमेटिव के साथ काम करता है।

% केवल java.lang.Integer के साथ काम करता है क्योंकि यह अंतर्निहित रूप से डाला जाता है (वास्तव में, इसे अनबॉक्स किया जाता है) int में। लेकिन बिगइंटर को अनबॉक्स नहीं किया जा सकता है। अनबॉक्सिंग/बैक्सिंग (जिसका अर्थ है ऑब्जेक्ट रूपांतरण के लिए आदिम/आदिम वस्तु) केवल int, float, double, short और बाइट के साथ काम करता है।

1

BigInteger एक वर्ग और एक आदिम नहीं है * 1, आप इसके साथ ऑपरेटरों का उपयोग नहीं करते हैं। http://docs.oracle.com/javase/1.5.0/docs/api/java/math/BigInteger.html#mod(java.math.BigInteger)

* 1: BigInteger के लिए तरीकों की जाँच करें पूर्णांक के मामले में, फ्लोट, आप ऑपरेटरों क्योंकि JVM स्वचालित रूप से वस्तु अपने आदिम मूल्य को (autoboxing)

2

एक और अधिक कारगर तरीका धर्मान्तरित का उपयोग कर सकते आखिरी बिट की जांच करना है। यदि यह 0 (उर्फ false) संख्या भी है, अन्यथा यह विषम है।

public boolean odd(BigInteger i){ 
    return i.testBit(0); 
} 

odd(BigInteger.valueOf(1));//true 
odd(BigInteger.valueOf(2));//false 
odd(BigInteger.valueOf(101));//true 
odd(BigInteger.valueOf(100));//false 

इसके अलावा कोड की इसकी कम लाइनें भी हैं।

2

मैं इस तरह से वर्ग BigInteger की विधि remainder का उपयोग करेंगे:

BigInteger result = a.remainder(b); 

काम तथ्य यह है कि BigInteger अपरिवर्तनीय है की वजह से है, तो एक विधि द्वारा बदला नहीं जाएगा।