je veux prendre une entrée entière de 1000 chiffres tout à la fois, & voulez ajouter les chiffres séparément.il y a-t-il une méthode de saisie pour prendre une telle entrée importante?prendre grand nombre entier d'entrée tout à la fois en C++
Répondre
Vous avez besoin d'une bibliothèque pour prendre en charge cette fonctionnalité.
Lire les chiffres dans une chaîne et utiliser une bibliothèque math multiprécision telle que GMP pour faire l'ajout. La bibliothèque devrait avoir des fonctions pour convertir entre les chaînes de chiffres et la représentation interne de la bibliothèque pour les nombres.
(En fait, il semble que GMP peut lire directement les chiffres d'un istream
, de sorte que vous pouvez même pas besoin d'une chaîne.)
Je suis un peu clair sur la question. Si vous ajoutez les chiffres séparément, j'aurais pensé que vous les traitiez plus comme une chaîne qu'un entier (au moins, jusqu'à ce que vous commenciez à additionner les chiffres).
Pouvez-vous clarifier comment le nombre entier de 1 000 chiffres doit être stocké en mémoire?
Je ne suis pas très sûr de savoir si je devrais prendre d'entrée comme une chaîne ou un integer.if je prends comme une chaîne, alors comment puis-je convertir chaque chiffre en entier? –
@nafiz amin: La façon la plus simple de convertir un caractère en entier est de soustraire la constante '0' de votre personnage. Par exemple: si votre personnage est '1' (ASCII 49) et que vous soustrayez '0' (ASCII 48), le résultat est l'entier 1. Voir les réponses de my et andreas. – Blastfurnace
Vous devez entrer cela sous forme de chaîne. Séparez-les et convertissez chaque caractère en entier. Additionnez-les, et vous avez terminé.
Exemple, ce nombre ici (généré aléatoirement):
9624526619162264306083309360203157186784123851390498919674886891002552146753945797326679482200717699585297042606470048297021049209667042255911984240697992738371633115195140494325737382583412562136836759072897211537655046343769659111215754043609344618490646811291135643554115350431099553593485744944746093896695837300975718819726339233383800764568364950577294931831936979504756278187812548901366714205562309364234394802723329400976924082450161974562063268243689930750925213262044910428021004262080895556879515597779404780565380480750286553508081070834339176079062215815331059349488936312244526697733596052063044560959189161656978673936732284706841120711543620038686227462170335634371808995466024671420024705248851244350701111587608201303840696489479021196275228499780922745352396928865910631672384263395712487735712098161853665189905194589355110620257494673972892816413534347360049692019184831019218764766067298983043791063184786671132332077197148683743991683245617836086353821268720434176862469084808
Et voici le programme C++:
int strint(std::string &str) {
int i;
std::stringstream intstr(str);
intstr >> i;
return i;
}
int main() {
std::string strdigit, schar;
int sum = 0;
std::cout << "Enter Digits: ";
std::cin >> strdigit;
std::stringstream ss;
for (int i = 0; i < strdigit.length(); i++) {
ss.clear();
ss << strdigit[i];
ss >> schar;
sum += strint(schar);
}
std::cout << sum;
}
La somme est: 4479
lire simplement les chiffres dans une chaîne et utilisez std :: accumulate. Par exemple:
std::string str("1234567890"); // your number here
int result = std::accumulate(str.begin(), str.end(), 0, [](int val, char ch)
{
return val + (ch - '0');
});
std::cout << result << '\n'; // display the answer
Comme suggéré par Marlon, pourquoi ne pas simplement utiliser un bon 'ol pour boucle et chaîne?
int main() {
string str = "3985792792679283635";
int len = str.length();
int sum = 0;
for(int i = 0; i < len; i++) {
sum += str[i] - '0';
}
cout << sum << endl;
}
Si vous utilisez une chaîne, vous pouvez utiliser une boucle for – Marlon