Τι τύπου μεταβλητή θα χρησιμοποιήσω για μεγάλους ακέραιους?

Συζητήσεις για την γλώσσα C και C++

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
bill777
Δημοσιεύσεις: 14
Εγγραφή: 13 Ιούλ 2010 13:51

Τι τύπου μεταβλητή θα χρησιμοποιήσω για μεγάλους ακέραιους?

Δημοσίευση από bill777 » 13 Ιούλ 2010 14:02

Γεια χαρά παιδιά,

Είμαι καινούριος στο φόρουμ. Θα ήθελα να κάνω μια ερώτηση. Έχω κάνει έναν αλγόριθμο στη C, αλλά δεν ξέρω τι να κάνω ώστε να δηλώσω μεταβλητές που είναι μεγάλοι ακέραιοι αριθμοί. Οι μεταβλητές τύπου int δεν επαρκούν και οι μεταβλητές long int δεν έχουν διαφορά από την int. Δεν σκέφτηκα κάποιον απλό τρόπο, δεδομένου ότι απ' όσο ξέρω δεν υπάρχουν άλλου τύπου μεταβλητές για κάτι τέτοιο. Σκέφτηκα μήπως με κάποιο τρόπο βοηθούσε ένα string αλλά δεν έχω εξοικείωση στη χρήση του.

Μία απάντηση με σώζει.

Σας ευχαριστώ προκαταβολικά.

nbc
Honorary Member
Δημοσιεύσεις: 526
Εγγραφή: 05 Σεπ 2009 20:12
Επικοινωνία:

Τι τύπου μεταβλητή θα χρησιμοποιήσω για μεγάλους ακέραιους?

Δημοσίευση από nbc » 13 Ιούλ 2010 14:18

Εξαρτάται από τον compiler. Συνήθως, θα τον βρεις ως __int64 (VC, Borland) ή long long (GCC). Στο ISOC99 προστέθηκε ο int64_t αλλά στη C++ υπάρχει πρόβλημα.

Αν θέλεις portability, χρησιμοποίησε κάτι σαν το παρακάτω στην αρχή του source

Κώδικας: Επιλογή όλων

#if defined(_MSC_VER) || defined(__BORLANDC__)
typedef unsigned __int64 ulong64;
typedef signed __int64 slong64;
#else
typedef unsigned long long ulong64;
typedef signed long long slong64;
#endif
...και "παίξε" με ulong64 και slong64.

bill777
Δημοσιεύσεις: 14
Εγγραφή: 13 Ιούλ 2010 13:51

Τι τύπου μεταβλητή θα χρησιμοποιήσω για μεγάλους ακέραιους?

Δημοσίευση από bill777 » 13 Ιούλ 2010 14:32

Χρησιμοποιώ την Dev C. Οπότε θα χρησιμοποιήσω struct σαν το παραπάνω?

nbc
Honorary Member
Δημοσιεύσεις: 526
Εγγραφή: 05 Σεπ 2009 20:12
Επικοινωνία:

Τι τύπου μεταβλητή θα χρησιμοποιήσω για μεγάλους ακέραιους?

Δημοσίευση από nbc » 13 Ιούλ 2010 14:39

Θα σου κάνει...

bill777
Δημοσιεύσεις: 14
Εγγραφή: 13 Ιούλ 2010 13:51

Τι τύπου μεταβλητή θα χρησιμοποιήσω για μεγάλους ακέραιους?

Δημοσίευση από bill777 » 13 Ιούλ 2010 14:57

Και άλλη μια ερώτηση: Στην printf πώς δηλώνεται η long long? printf("%lld",...) ? 'Η κάπως αλλιώς?

nbc
Honorary Member
Δημοσιεύσεις: 526
Εγγραφή: 05 Σεπ 2009 20:12
Επικοινωνία:

Τι τύπου μεταβλητή θα χρησιμοποιήσω για μεγάλους ακέραιους?

Δημοσίευση από nbc » 13 Ιούλ 2010 15:31

Πάλι εξαρτάται από τον compiler. Αυτό που γράφεις παίζει σε gcc, άρα λογικά θα σου δουλέψει. Είναι για signed. Για unsigned "%llu". Το "ll" μπορεί να γραφτεί και ως "L".

Σε VC "Ι64d", σε C99 macro "PRId64". Η borland υποστηρίζει και τις δύο συντάξεις (gcc/vc). Άνοιξε τον "inttypes.h" header (αν έχεις) για λεπτομέρειες.

nbc
Honorary Member
Δημοσιεύσεις: 526
Εγγραφή: 05 Σεπ 2009 20:12
Επικοινωνία:

Τι τύπου μεταβλητή θα χρησιμοποιήσω για μεγάλους ακέραιους?

Δημοσίευση από nbc » 13 Ιούλ 2010 16:05

Κάτι άσχετο: Πως γίνεται και όλοι μαθαίνουν σε Dev-C++? (εξ όσων βλέπω στα forums). Εσύ ας πούμε, πως το έμαθες? Σπουδάζεις και αυτό σου είπε ο καθηγητής?

Ρωτάω γιατί μετά λύπης μου διαπιστώνω την απουσία του ΑΠΟΛΥΤΟΥ C/C++ IDE, που μάλιστα ξεκίνησε ως ελληνικό (Γιάννης Μανδράβελλος) project: To Code::Blocks.

Το CB είναι έτη φωτός μπροστά από το Dev-C++, απλά δεν συγκρίνεται με οτιδήποτε άλλο. Open source, cross-platform (Windows, Mac, Linux), multiple compiler support (χρησιμοποιείς όποιον/όποιους θέλεις, και εναλλάσσεις μεταξύ τους πανεύκολα!), και χίλια δυο άλλα μαγικά μέσω του scriptable plugin engine που διαθέτει.

bill777
Δημοσιεύσεις: 14
Εγγραφή: 13 Ιούλ 2010 13:51

Τι τύπου μεταβλητή θα χρησιμοποιήσω για μεγάλους ακέραιους?

Δημοσίευση από bill777 » 13 Ιούλ 2010 17:22

Σπουδάζω. Κάναμε C στο 1ο και 2ο εξάμηνο και κάναμε Borland. Από κάποια στιγμή και μετά το μάθημα γίνεται σε Dev. Αυτό που λες δεν το ξέρω μιας και δεν είχα ποτέ ασχοληθεί με τον προγραμματισμό. Τον τελευταίο χρόνο ασχολούμαι.

Να ρωτήσω και κάτι άλλο? Στο πρόγραμμα που κάνω, ζητάει από τον χρήστη να δώσει έναν αριθμό με βάση τον οποίο κάνει τις υπόλοιπες πράξεις,κτλ. Πίστεβα ότι ίσως έφταιγαν οι μεταβλητές και έπρεπε να χρησιμοποιήσω μεγαλύτερες της int αλλά δεν είδα καμία αλλαγή. Πιθανόν να έχω κάνει κάτι λάθος, οπότε θα το ξανακοιτάξω. Αλλά ξέρεις τι αλλο μπορεί να φταίει? Μέχρι κα΄ποιον αριθμό που δίνεται ως δεδομένο βγάζει σωστά αποτελέσματα. Αλλά από έναν αριθμό και πάνω το πρόγραμμα κολλάει ή φαίνεται σα να μην τελιώνει ποτε.

bill777
Δημοσιεύσεις: 14
Εγγραφή: 13 Ιούλ 2010 13:51

Τι τύπου μεταβλητή θα χρησιμοποιήσω για μεγάλους ακέραιους?

Δημοσίευση από bill777 » 13 Ιούλ 2010 17:30

Απ' ότι βλέπω το πρόβλημα είναι οι μεταβλητές. Θα ξαναδοκιμάσω με τη long long

Απάντηση

Επιστροφή στο “C, C++”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης