मैं mpz (सी) या BigInteger (जावा) के समान वर्ग लिखने के साथ गड़बड़ कर रहा हूँ। यह सिर्फ मजेदार है, इसलिए कृपया इस बारे में मत जाओ कि मुझे अपना खुद का लेखन क्यों नहीं करना चाहिए।मैं प्रोग्राम में डिवीजन कैसे कर सकता हूं, अंक से अंक?
मैं एक वर्ग के लिए इसी तरह की है:, अब
public class HugeInt
{
public List<Integer> digits;
public HugeInt(String value)
{
// convert string value into its seperate digits.
// store them in instance variable above
}
}
ऐड() कर रहे हैं और घटाना() इस वर्ग की विधि बहुत सरल हैं। यहां एक उदाहरण दिया गया है:
private List<Integer> add(List<Integer> a, List<Integer> b)
{
List<Integer> smallerDigits = (compareDigits(a,b) < 0) ? a : b;
List<Integer> largerDigits = (compareDigits(a,b) >= 0) ? a : b;
List<Integer> result = new ArrayList<Integer>();
int carry = 0;
for(int i = 0; i < largerDigits.size(); i++)
{
int num1 = largerDigits.get(i);
int num2 = (i < smallerDigits.size()) ? smallerDigits.get(i) : 0;
result.add((num1 + num2 + carry) % 10);
carry = ((num1 + num2 + carry)/10);
}
if (carry != 0) result.add(carry);
return result;
}
इसी प्रकार, गुणा करना बहुत कठिन नहीं था।
मैं विकिपीडिया पर देखता हूं Division Algorithms पर एक पृष्ठ है, लेकिन मुझे यकीन नहीं है कि मैं जो करने की कोशिश कर रहा हूं उसके लिए कौन सा उचित है।
क्योंकि ये सकारात्मक पूर्णांक (अंकों के रूप में प्रतिनिधित्व) मनमाने ढंग से लंबे हो सकते हैं, मैं यह सुनिश्चित करना चाहता हूं कि मैं अंक-दर-अंकों के आधार पर किसी भी अन्य पर किसी भी संचालन करने का प्रयास नहीं करता हूं।
हालांकि, क्या कोई मुझे दो संख्याओं का विभाजन करने के लिए सही दिशा में इंगित कर सकता है जिसे List
के रूप में दर्शाया गया है? इसके अलावा, मैं शेष को अनदेखा कर सकता हूं क्योंकि यह पूर्णांक विभाजन है।<Integer
>
+1: मुझे यह प्रश्न बहुत पसंद है। मैं बस इसके मजाक के लिए एक एल्गोरिदम डाल दूंगा। –
Knuth का "सेमिन्यूमेरिकल एल्गोरिदम" इस विषय में बहुत विस्तार से जाता है। –