Максимум C++

На днях первоклассник Вася научился складывать числа. Ему этот процесс очень нравится, и он складывает всё подряд. Когда все числа вокруг оказываются сложенными, Вася обращается к своему старшему брату Пете за новыми числами. После нескольких обращений устав работать генератором случайных чисел, Петя придумал для Васи занятие, которое может надолго того занять.

Он предложил Васе находить суммы цифр последовательных чисел — 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21 — и так далее, пока Васе не надоест. Вася оказался в восторге от идеи и принялся за работу. За вчерашний день Вася нашёл суммы цифр каждого из чисел от 1 до 115. Посмотрев на результаты младшего брата, Петя заметил, что суммы цифр последовательных чисел не являются случайными, часто они идут подряд, но полностью закономерность он так и не понял.

Чтобы найти закономерности, Петя решил исследовать крайние случаи, например, какое из чисел даёт максимальную сумму цифр. Данных для чисел до 115 оказалось недостаточно для окончательных выводов, и Пете пришла в голову идея для ускорения вычислений использовать вместо братика компьютер. Поскольку сам он в программировании не очень силён, он обратился за решением этой задачи к Вам.

Входные данные

   В первой строке входных данных находится число N (1 <= N <= 2 147 483 647).

Выходные данные

   Выведите число от 1 до N включительно с максимальной суммой цифр. Если чисел с максимальной суммой цифр несколько, выведите наибольшее из них.

 

#include <iostream>
using namespace std;
 
int TheNumberOfDigits(int n)
{
    int i=1;
    while ((n/=10)>0)
    {
        i++;
    }
    return i;
}
int sc(int a) 
{
    int sum = 0;
    while (a/1>0)
    {
        sum+=a%10;
        a/=10;
    }    
    return sum;
}
long long int pow10(int x)
{
    long long int a=1;
    for (int i=0;i<x;i++)
    {
        a=a*10;
    }
    return a;

int main()
{
    int n, v, t, x;
    cin>>n;
    t=TheNumberOfDigits(n);
    x=n;
    for (int i=1;i<t;i++)
    {
        v=(n/pow10(i+1))*pow10(i+1)+(n%pow10(i+1)/pow10(i)-1)*pow10(i)+pow10(i)-1;
        if (sc(v)>sc(x))
            x=v;
    }
    cout<<x<<endl;
    return 0;
}

Назад

Повышение продаж с помощью веб-форм Разложение числа на простые множители Как качественный контент способствует продвижению сайта Как выбрать хостинг Как писать SEO-тексты? Что такое SEO оптимизация сайта


Хостинг

Есть решение которого нет на сайте? Пиши admin@devexe.top