Задача 102B от Codeforces требует, чтобы мы нашли наименьшее количество раз, которое нам нужно для суммирования цифр заданного целого числа, пока мы не получим однозначное целое число.

Решение

Код принимает входное целое число как строку, поскольку целое число может содержать более 18 цифр, что является максимальным ограничением для типа данных long long int в C++. Функция sumOfDigits() вычисляет сумму цифр заданного числа и возвращает ее в виде строки. Основная функция считывает входную строку и выполняет цикл до тех пор, пока длина строки не станет больше или равной 2. На каждой итерации она вызывает функцию sumOfDigits() для вычисления суммы цифр текущего числа, увеличивает счетчик и обновляет значение счетчика. число.

Во-первых, макрос charToInt() преобразует символ в его целочисленное значение, вычитая из него значение ASCII '0'.

#define charToInt(c) (c-'0')

Функция sumOfDigits() принимает на вход строку number и возвращает сумму ее цифр в виде строки. Сначала он инициализирует переменную sum значением 0 и перебирает строку, добавляя целочисленное значение каждого символа к переменной sum с помощью макроса charToInt(). Наконец, он возвращает переменную sum в виде строки с помощью функции to_string().

string sumOfDigits(string number)
{
    int sum = 0;
    for (int i=0; i<number.length(); ++i) {
        sum += charToInt(number[i]);
    }
    return to_string(sum);
}

Затем, используя цикл while, входная строка повторяется, пока длина числа больше 1. И на каждой итерации count увеличивается на 1.

int main()
{
    // 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
    string n;
    int count = 0;
    cin >> n;

    while (n.length() >= 2)
    {
        count++;
        n = sumOfDigits(n);
    }

    cout << count << endl;

    puts("");
}

В целом, данный код представляет собой простое и эффективное решение задачи 102B от Codeforces. В соответствии с требованием он правильно обрабатывает большие входные целые числа и обеспечивает ожидаемый результат для каждого тестового примера.

Полный фрагмент кода

// https://codeforces.com/problemset/problem/102/B
#include <iostream>
using namespace std;

#define charToInt(c) (c-'0')

string sumOfDigits(string number)
{
    int sum = 0;
    for (int i=0; i<number.length(); ++i) {
        sum += charToInt(number[i]);
    }
    return to_string(sum);
}

int main()
{
    // 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
    string n;
    int count = 0;
    cin >> n;

    while (n.length() >= 2)
    {
        count++;
        n = sumOfDigits(n);
    }

    cout << count << endl;

    puts("");
}

Если вы нашли эту статью полезной и информативной, не стесняйтесь подписываться на меня в моих учетных записях в социальных сетях, чтобы получать больше обновлений и информации о веб-разработке:

Спасибо, что нашли время прочитать эту статью. Желаю вам всего наилучшего в вашем учебном путешествии!