मैं स्ट्रिंग को बिगइंटर में कैसे परिवर्तित करूं?


83

मैं मानक इनपुट से कुछ बहुत बड़ी संख्याओं को पढ़ने और उन्हें एक साथ जोड़ने की कोशिश कर रहा हूं।

हालाँकि, BigInteger में जोड़ने के लिए, मुझे उपयोग करने की आवश्यकता है BigInteger.valueOf(long);:

private BigInteger sum = BigInteger.valueOf(0);

private void sum(String newNumber) {
    // BigInteger is immutable, reassign the variable:
    sum = sum.add(BigInteger.valueOf(Long.parseLong(newNumber)));
}

यह ठीक काम करता है, लेकिन BigInteger.valueOf()केवल एक के रूप में long, मैं संख्या को longअधिकतम मूल्य (9223372036854747758080) से अधिक नहीं जोड़ सकता ।

जब भी मैं 922337203685474780808 या अधिक जोड़ने की कोशिश करता हूं, मुझे एक नंबरफ़ॉर्मैट अपवाद (जो पूरी तरह से अपेक्षित है) मिलता है।

क्या कुछ ऐसा है BigInteger.parseBigInteger(String)?

जवाबों:


141

कंस्ट्रक्टर का उपयोग करना

BigInteger (स्ट्रिंग वैल)

एक BigInteger में BigInteger के दशमलव स्ट्रिंग प्रतिनिधित्व का अनुवाद करता है।

जावाडोक


मैं एक ही लेकिन सामना करना पड़ा मुद्दा coz मैं java.math.BigInteger आयात करने के लिए याद किया की कोशिश की
अरुण

23

प्रलेखन के अनुसार :

BigInteger (स्ट्रिंग वैल)

एक BigInteger में BigInteger के दशमलव स्ट्रिंग प्रतिनिधित्व का अनुवाद करता है।

इसका मतलब है कि आप Stringकिसी BigIntegerऑब्जेक्ट को इनिशियलाइज़ करने के लिए उपयोग कर सकते हैं , जैसा कि निम्नलिखित स्निपेट में दिखाया गया है:

sum = sum.add(new BigInteger(newNumber));

10

BigInteger में एक कंस्ट्रक्टर है जहां आप स्ट्रिंग को एक तर्क के रूप में पास कर सकते हैं।

नीचे कोशिश करें,

private void sum(String newNumber) {
    // BigInteger is immutable, reassign the variable:
    this.sum = this.sum.add(new BigInteger(newNumber));
}

8

उपयोग करने के बजाय valueOf(long)और parse(), आप सीधे बिगइंटर कंस्ट्रक्टर का उपयोग कर सकते हैं जो एक स्ट्रिंग तर्क लेता है:

BigInteger numBig = new BigInteger("8599825996872482982482982252524684268426846846846846849848418418414141841841984219848941984218942894298421984286289228927948728929829");

जो आपको वांछित मूल्य देना चाहिए।


2

एक पाश जहां आप एक परिवर्तित करना चाहते हैं के लिए arrayके stringsएक करने के लिए arrayकी bigIntegersऐसा करते हैं:

String[] unsorted = new String[n]; //array of Strings
BigInteger[] series = new BigInteger[n]; //array of BigIntegers

for(int i=0; i<n; i++){
    series[i] = new BigInteger(unsorted[i]); //convert String to bigInteger
}

0

यदि आप प्लेनटेक्स्ट (सिर्फ नंबर नहीं) को बिगइन्टेगर में परिवर्तित करना चाहते हैं, तो आप एक अपवाद में चलेंगे, यदि आप केवल नए बिगइन्टेगर ("नंबर नहीं") का प्रयास करते हैं

इस मामले में आप इसे इस तरह से कर सकते हैं:

public  BigInteger stringToBigInteger(String string){
    byte[] asciiCharacters = string.getBytes(StandardCharsets.US_ASCII);
    StringBuilder asciiString = new StringBuilder();
    for(byte asciiCharacter:asciiCharacters){
        asciiString.append(Byte.toString(asciiCharacter));
    }
    BigInteger bigInteger = new BigInteger(asciiString.toString());
    return bigInteger;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.