принимая большой целочисленный ввод все в C ++ - PullRequest
2 голосов
/ 03 декабря 2010

Я хочу взять 1000-значный целочисленный ввод за раз, и хочу добавить цифры отдельно. Есть ли способ ввода, чтобы сделать такой большой ввод?

Ответы [ 6 ]

3 голосов
/ 03 декабря 2010

Вам нужно ввести это как строку. Разделите их и преобразуйте каждый символ в целое число. Добавьте их, и все готово.

Пример, это число здесь (генерируется случайным образом):

9624526619162264306083309360203157186784123851390498919674886891002552146753945797326679482200717699585297042606470048297021049209667042255911984240697992738371633115195140494325737382583412562136836759072897211537655046343769659111215754043609344618490646811291135643554115350431099553593485744944746093896695837300975718819726339233383800764568364950577294931831936979504756278187812548901366714205562309364234394802723329400976924082450161974562063268243689930750925213262044910428021004262080895556879515597779404780565380480750286553508081070834339176079062215815331059349488936312244526697733596052063044560959189161656978673936732284706841120711543620038686227462170335634371808995466024671420024705248851244350701111587608201303840696489479021196275228499780922745352396928865910631672384263395712487735712098161853665189905194589355110620257494673972892816413534347360049692019184831019218764766067298983043791063184786671132332077197148683743991683245617836086353821268720434176862469084808

А вот программа на 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;
}

Сумма: 4479

2 голосов
/ 03 декабря 2010

Просто прочитайте цифры в строку и используйте std :: накопить.Например:

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
0 голосов
/ 03 декабря 2010

Как предложил Марлон, почему бы просто не использовать good 'ol для цикла и строки?

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;

}
0 голосов
/ 03 декабря 2010

Я немного неясен по этому вопросу. Если вы добавляете цифры отдельно, я бы подумал, что вы рассматриваете их скорее как строку, а не как целое число (по крайней мере, до тех пор, пока вы не начнете добавлять цифры).

Можете ли вы уточнить, как нужно хранить 1000-значное целое в памяти?

0 голосов
/ 03 декабря 2010

Считайте цифры в строку и используйте сложную математическую библиотеку, такую ​​как GMP , чтобы выполнить сложение. Библиотека должна иметь функции для преобразования между строками цифр и внутреннего представления библиотеки для чисел.

(На самом деле, похоже, что GMP может читать цифры непосредственно из istream, поэтому вам может даже не понадобиться строка.)

0 голосов
/ 03 декабря 2010

Вам нужна библиотека, чтобы обеспечить поддержку для этого.

...