ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Обсуждение задачи 1048. Сверхдлинные суммы

Что не так?( Why WA test 2)
Послано fsb4000 30 ноя 2010 20:05
#include<iostream>
#include<cstdlib>
#include<vector>
#include<string>
using namespace std;

typedef vector<long> lnum;
const long base=1000*1000*1000;


void print(lnum a){
    printf ("%d", a.empty() ? 0 : a.back());
    for (int i=(int)a.size()-2; i>=0; --i)
    printf ("%09d", a[i]);
}


void a_plus_b_a(lnum &a, lnum b){
    long carry = 0;
        for (size_t i=0; i<max(a.size(),b.size()) || carry; ++i)
        {
            if (i == a.size())
            {
                a.push_back (0);
            }
            a[i] += carry + (i < b.size() ? b[i] : 0);
            carry = a[i] >= base;
            if (carry)
            {
                a[i] -= base;
            }
        }
}


lnum string_to_Super_long_number(string s){
    lnum a;
    for (int i=(int)s.length(); i>0; i-=9)
    {
        if (i < 9)
        {
            a.push_back (atoi (s.substr (0, i).c_str()));
        }
        else
        {
            a.push_back (atoi (s.substr (i-9, 9).c_str()));
        }
    }
    while (a.size() > 1 && a.back() == 0){
        a.pop_back();
    }
    return a;
}



int main(void){
    lnum a,b;
    long i;
    long m;
    char c;
    string s1="",s2="";
    cin>>m;
    for(i=0;i<m;i++)
    {
        cin>>c;
        s1=s1+c;
        cin>>c;
        s2=s2+c;
    }
    a=string_to_Super_long_number(s1);
    b=string_to_Super_long_number(s2);
    a_plus_b_a(a,b);
    print(a);
    cout<<endl;
    system("pause");
    return 0;
}