Информация об изменениях

Сообщение Re[2]: Совсем чуть-чуть от 13.03.2015 7:27

Изменено 13.03.2015 12:24 Warlock78

//=============================================================================

#include <stdio.h>

//=============================================================================

inline int PositionsSum(int n)
{
    int sum = 0;
    while (n)
    {
        sum += n % 10;
        n /= 10;
    }
    return sum;
}

//=============================================================================

inline int FindMaxPositionsSumMaxNumber(const int x)
{
    if (x < 10)
        return x;

    int pos = 10;

    for (int i = x; i > 1000; i /= 10)
        pos *= 10;

    int res = x / pos * pos - 1;

    int pos2 = pos * 10;
    int res2 = x / pos2 * pos2 - 1;

    res = PositionsSum(res) >= PositionsSum(res2) ? res : res2;

    return PositionsSum(x) >= PositionsSum(res) ? x : res;
}

//=============================================================================

int main(void)
{
    freopen("input.txt",  "r", stdin);
    freopen("output.txt", "w", stdout);

    int num = 0;
    scanf("%d", &num);

    printf("%d\n", FindMaxPositionsSumMaxNumber(num));

    return 0;
}

//=============================================================================
Re[2]: Совсем чуть-чуть
#include <stdio.h>


inline int PositionsSum(int n)
{
    int sum = 0;
    while (n)
    {
        sum += n % 10;
        n /= 10;
    }
    return sum;
}


inline int FindMaxPositionsSumMaxNumber(const int Num)
{
    if (Num < 10)
        return Num;

    int res = 0;
    int res_sum = 0;

    int pos = 10;

    for (int i = Num; i >= 10; i /= 10)
    {
        int t = Num / pos * pos - 1;
        int t_sum = PositionsSum(t);

        if (t_sum > res_sum)
        {
            res     = t;
            res_sum = t_sum;
        }

        pos *= 10;
    }

    return PositionsSum(Num) >= res_sum ? Num : res;
}


int main(void)
{
    freopen("input.txt",  "r", stdin);
    freopen("output.txt", "w", stdout);

    int num = 0;
    scanf("%d", &num);

    printf("%d\n", FindMaxPositionsSumMaxNumber(num));

    return 0;
}