Προς το περιεχόμενο

real big integer problem...


pappous_soulis

Προτεινόμενες αναρτήσεις

Δημοσ.

Έχω έναν integer του οποίου η τιμή (πρέπει να) είναι το γινόμενο 100 διαφορετικών ακεραίων μεγαλύτερων του μηδενός.

Το πρόβλημα είναι ότι λόγω του μεγέθους του γινομένου είναι αδύνατο να εκχωρηθεί σαν τιμή του ακεραίου,και γι'αυτό μου βγάζει λανθασμένο αποτέλεσμα.

 

Πως θα μπορούσα να εμφανίσω το γινόμενο στην οθόνη?

Δημοσ.

Είτε θα δοκιμάσεις Long που είναι 8 byte αντί για 4 byte που είναι ο απλός integer, είτε θα το κάνεις κατευθείαν String όμως δεν θα μπορείς να το πειράξεις μετά(αν είναι μεγαλύτερο από Long).

Δημοσ.

Είτε θα πάς σε Long Int τών 8Bytes είτε σε double τών 8 bytes (+round) και υπάρχουν και κάποιοι τύποι για πολύ μεγάλους ακέραιους άλλα είναι language specific...

Δημοσ.

Δοκίμασα και unsigned long integer,δεν είναι αρκετός.

Το πρόβλημα είναι ότι μου ζητάει έναν αριθμό Κ μεγαλύτερο του 15,ο οποίος ορίζει ένα πεδίο [1,Κ],και έχω έναν πίνακα 100 θέσεων όπου αποθηκεύοντε 100 τυχαίοι ακέραιοι που έχουν τιμές μέσα στο πεδίο [1,Κ].Μιλάμε για τρελές τιμές.

Τώρα για string...

Δημοσ.

Μπορείς να κάνεις το εξής κόλπο αφού μιλάμε για πολλαπλασιασμό. Βάλε το αποτέλεσμα των 50 αριθμών σε έναν Long και των άλλων 50 σε άλλον ένα και δώσε το αποτέλεσμα της πράξης των δύο Long κατευθείαν σε String.

Δημοσ.

pappous_soulis τί στο καλό εφράζει το γινόμενο αυτό που υπολογίζεις και αναμένεις να φτάσει πχ το 18.446.744.073.709.551.615 (64μπιτος θετικός ακέραιος)???

 

Πάντως αν υποθέσουμε πως χρησιμοποιείς 32μπιτους ακέραιους εως το μέγιστο της τιμής τους, αντιλαμβάνεσαι πως θα χρειαστείς τόσα bits όσο το γινόμενο του 32 με τον αριθμό των παραγόντων... Ελπίζω να έχεις μια καλή δικαιολογία!

 

Υ.Γ. Στη C ο παραπάνω 64μπιτος ακέραιος γράφεται unsigned long long int

Δημοσ.

Το γινόμενο δεν εκφράζει τίποτα συγκεκριμένο.

Είναι απλά το γινόμενο 100 ακεραίων που ο καθένας έχει τιμή απο 1 έως Κ όπου Κ > 15.

Δημοσ.

Κ>15 παραείναι και 100 αριθμοί παραείναι. Είτε δοκίμασε με Κ<5 είτε δοκίμασε με 50 αριθμούς αλλιώς δεν πρόκειται ποτέ να παίξει σε απλό υπολογιστή σπιτιού.

Δημοσ.

Υπάρχουν κάποιες τεχνικές για να παίξεις. Βέβαια πρέπει να εξετάζεται και η μεταφερσιμότητα του κώδικα από πλατφόρμα σε πλατφόρμα (portability).

 

Αν προσπαθούσες να φτιάξεις πρόγραμμα θα σου έλεγα να χρησιμοποιήσεις κάποια έτοιμη βιβλιοθήκη από αυτές που έχουν φτιαχτεί για τέτοιο σκοπό. Αν θες να δεις κάτι έτοιμο σε κώδικα/ιδέα... google! Δεν θα αργήσεις να πέσεις πάνω σε κάτι, για παράδειγμα αυτό.

Δημοσ.
Το γινόμενο δεν εκφράζει τίποτα συγκεκριμένο.

Είναι απλά το γινόμενο 100 ακεραίων που ο καθένας έχει τιμή απο 1 έως Κ όπου Κ > 15.

 

και ανετα βρισκεις κατι της ταξης του 100! που ειναι ενας αριθμος μεγαλυτερος απο τον αριθμω των αστεριων που υπαρχουν στο συμπαν. μιλαμε ανετα για αρθιμους της ταξης 10^150 ,αν το Κ σου ειναι αρκετα μεγαλο, κατι που ειναι φυσικα αδυνατο να το παρουσιασεις ετσι απλα παρα μονο με δυναμεις

 

υγ ξερω οτι η προσωρινη μνημη (αναμεσα σε δυο υπολογισμους ) μπορει να ειναι μεχρι και 64 bytes για εναν αριθμο ελπιζω να μην κανω λαθος

Δημοσ.

Μπορείς να κάνεις λίστες με struct με ακεραίους και να παίξεις με δυνάμεις κλπ,

ή μπορείς να χρησιμοποιήσεις libraries που είναι ειδικά για τέτοια θέματα.

 

Μια τέτοια είναι και η GMP

 

Οδηγίες για Windows εδώ:

http://eclass.uth.gr/claroline/document/document.php

με παραδειγματάκια, έχει ένα και για πολλαπλασιασμό αν θυμαμαι καλά.

 

To έκανα σε και σε Ubuntu όταν το χρειάστηκα άμα ψάξεις στο Google θα βρείς εύκολα πως.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...