Не быть мне олимпиадником :(

« картинки и свежие анекдоты | чат

Не быть мне олимпиадником :(

Решил тряхнуть стариной и порешать олимпиадные задачки по программированию. Поскольку последний раз на олимпиаде был лет 15 назад, то решил начать с самых простых задач. Итак условие:

A+B
(Время: 1 сек. Память: 16 Мб Сложность: 2%)

Требуется сложить два целых числа А и В.

Входные данные
Даны две строки в которых записано два натуральных числа, не превышающих 10^9.

Выходные данные
Нужно вывести одно целое число — сумму чисел А и В.


Через пятнадцать минут у меня получилось следующее:

#include <algorithm>
#include <iostream>
#include <string>

const std::string DIGITS = "0123456789ABCDEF";
const size_t BASE = DIGITS.length();

int main(int argc, char* argv[])
{
    std::string first = "FF09";
    std::string second = "EDFA";

    std::cout << first << " + " << second << " = ";

    std::string result;

    bool overflow = false;
    std::string::reverse_iterator firstIt = first.rbegin();
    std::string::reverse_iterator secondIt = second.rbegin();
    const size_t maxLength = std::max(first.length(), second.length());

    for (size_t i = 0; i != maxLength; ++i)
    {
        size_t firstValue = 0;
        if (firstIt != first.rend())
        {
            firstValue = DIGITS.find(*firstIt);
            ++firstIt;
        }

        size_t secondValue = 0;
        if (secondIt != second.rend())
        {
            secondValue = DIGITS.find(*secondIt);
            ++secondIt;
        }

        size_t resultValue = firstValue + secondValue + (overflow ? 1 : 0);
        if (resultValue >= BASE)
        {
            resultValue -= BASE;
            overflow = true;
        }
        else
        {
            overflow = false;
        }

        result.push_back(DIGITS[resultValue]);
    }

    if (overflow)
    {
        result.push_back(DIGITS[1]);
    }

    std::reverse(result.begin(), result.end());
    std::cout << result << std::endl;

    return 0;
}


А вот что оказалось в ответе:

#include < stdio.h >

int main()
{
    char sa[] = "1";
    char sb[] = "9";
    long a,b;
    sscanf(sa,"%ld",&a);
    sscanf(sb,"%ld",&b);
    printf("%ld",a+b);
    return 0;
}


Заставило крепко задуматься...

Комментарий:

Ваше имя:

Ещё интересное на этом сайте:

Гель для рук
Анекдоты и картинки #6297005
Анекдоты и картинки #6297004
Милицейская засада на 17 лет
Вытирайте ноги! Пожалуйста...
#3143: Фейслифтинг по-франкенштейновски
Анекдоты и картинки #6289896
Ветераны
Соляной город
Чем думала - тем и застряла
Котовторнику посвящается
Анекдоты и картинки #6286600
#3142: Я не смотрю телевизор
#3141: Ключ от машины, где байты лежат
Лечение
Дневной крем от Adobe
Претензия
Как безопасно ударить милиционера
муха тоже вертолет
Места для курящих
« все анекдоты и картинки
Рейтинг@Mail.ru