2013-03-02 5 views
5

मैं 103993/33102 पर दशमलव विस्तार की गणना करने के लिए एक प्रोग्राम लिख रहा हूं और मैं उपयोगकर्ता के इनपुट की संख्या के आधार पर सभी पिछली दशमलवों को प्रिंट करना चाहता हूं। यह 10^5 तक सभी संख्याओं के लिए तेज़ी से चलता है लेकिन यदि इनपुट में 10^6 इनपुट को उत्तर देने के लिए लगभग 5 मिनट लगते हैं। मैं चीजों को कैसे गति दे सकता हूं? मैंने BigDecimal का उपयोग करके दो अलग-अलग दृष्टिकोणों की कोशिश की है और दूसरा स्ट्रिंग का उपयोग कर रहा है और न ही कोई कुशलतापूर्वक काम कर रहा है।बड़े इनपुट के लिए दशमलव गति कार्यक्रम बहुत धीमी गति से चल रहा है

public static void main(String[] args) throws NumberFormatException, 
     IOException { 
    // BigDecimal num1 = new BigDecimal(103993); 
    // BigDecimal num2 = new BigDecimal(33102); 
    String repNum = "415926530119026040722614947737296840070086399613316"; 
    // pw.println(num.toString()); 
    String sNum = "3.1"; 
    // pw.println(repNum.length()); 
    int cases = Integer.parseInt(br.readLine()); 
    int dec; 
    for (int i = 0; i < cases; i++) { 
     sNum = "3.1"; 
     dec = Integer.parseInt(br.readLine()); 

     if (dec == 0) 
      pw.println("3"); 
     else if (dec <= 52) { 
      sNum += repNum.substring(0, dec - 1); 
      pw.println(sNum); 
     } else { 
      while (dec > 52) { 
       sNum += repNum; 
       dec -= 51; 
      } 
      sNum += repNum.substring(0, dec - 1); 
      pw.println(sNum); 

     } 

     // pw.println(num1.divide(num2, dec, 
     // RoundingMode.FLOOR).toString()); 
    } 
} 
+0

'dec' और 'case' क्या हैं? – Joni

+0

डीसी आपके द्वारा विस्तारित दशमलव की संख्या है और मामले यह है कि यदि आप कई तरीकों से संख्या के दशमलव विस्तार को मुद्रित करना चाहते हैं, तो यदि मैं इनपुट 2 4 6 इनपुट करता हूं तो यह 4 दशमलव तक विस्तारित संख्या को मुद्रित करेगा इसे फिर से 6 वें –

उत्तर

2

अंकों की एक लंबी स्ट्रिंग बनाने के बजाय बस अंक मुद्रित करें। उदाहरण के लिए:

 while (dec > 52) { 
      System.out.print(repNum); 
      dec -= 51; 
     } 
     pw.println(repNum.substring(0, dec - 1)); 

श्रृंखलाबद्ध द्वारा एक पाश में एक लंबी स्ट्रिंग बनाना प्रदर्शन के लिए वास्तव में बुरा है क्योंकि तार अपरिवर्तनीय हो रहा है। कार्यक्रम अपने पूरे समय नए तारों को बना रहा है, एक दूसरे से लंबा है, और पुराने से नए अक्षरों की प्रतिलिपि बना रहा है, अनिवार्य रूप से लागू Schlemiel the Painter's algorithm

+0

तक विस्तारित किया जाएगा, वह 'स्ट्रिंगबफर' या 'स्ट्रिंगबिल्डर' – Seismoid

+0

का भी उपयोग कर सकता है धन्यवाद, मैं हमेशा भूल जाता हूं कि ये स्ट्रिंग्स अपरिवर्तनीय और सुपर धीमी हैं –

संबंधित मुद्दे