C++ Сложение огромных чисел

225
10 марта 2018, 19:47

Надо сложить 2 целых числа a и b, но при этом их сумма может доходить до 10^100. Я написал код, он работает только до определенного момента, когда пробуешь сложить например "111111111111111111111111111111" и "222222222222222222222222222222", ответ выдает уже не верный.

Как можно сложить два огромных числа в С++ чтобы их сумма могла доходить до 10^100 ?

Прилагаю код, но буду рад если вы покажете более простой способ решения.

#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
int main()
{
    int ia,ib;
int z=1;
string str1, str2;
cin>>str1>>str2;
int len1=str1.length();
int len2=str2.length();
char mas1[101], mas2[101];
int mas3[101];
double sk=0;
for(int i=0;i<len1;i++)
{
strcpy(mas1, str1.c_str());
}
for(int i=0;i<len2;i++)
{
strcpy(mas2, str2.c_str());
}
int lenm=0;
    if(len1>len2){lenm=len1;}
    if(len2>len1){lenm=len2;}
    if(len1==len2){lenm=len1;}
for(int i=0;i<lenm;i++)
{
    if(len1<z){ib=0;}else{ia = mas1[len1-z] - '0';}
    if(len2<z){ib=0;}else{ib = mas2[len2-z] - '0';}
    sk+=((ia+ib)*(pow(10,z)))/10;
    z++;
}
cout<<setprecision(100)<<sk<<endl;
return 0;
}

Спасибо за поправления, программа почти готова, но все равно есть одна ошибка. Когда складываем "11" и "11" выводит "22", а когда "15" и "15" вместо "30", выводит "20". В чем проблема?

Новый код прилагаю:

#include <iostream>
    #include <string>
    #include <iomanip>
    using namespace std;
    int main()
    {
    string str1, str2;
    cin>>str1>>str2;
    int len1=str1.length();
    int len2=str2.length();
    char mas1[101], mas2[101];
    int mas3[101], mas4[101];
    for(int i=0;i<len1;i++)
    {
    strcpy(mas1, str1.c_str());
    int ia = mas1[i] - '0';
    mas3[i] = ia;
    }
    for(int i=0;i<len2;i++)
    {
    strcpy(mas2, str2.c_str()); 
    int ia = mas2[i] - '0';
    mas4[i] = ia;
    }
    int length;
    if (len1 > len2)
        length = len1 + 1;
    else
        length = len2 + 1;
    for (int ix = 0; ix < length; ix++)
    {
        mas4[ix] += mas3[ix];
        mas4[ix + 1] += (mas4[ix] / 10);
        mas4[ix] %= 10; 
    }
    if (mas4[length - 1] == 0)
        length--;
    for(int i=0;i<len2;i++)
    {
    cout<<mas4[i];
    }
    return 0;
    }
Answer 1

Есть масса информации на тему "Длинная арифметика" в С/С++
Например:

  • http://cppstudio.com/post/5036/

  • https://mindhalls.ru/big-number-in-c-cpp-add-sub/

  • http://e-maxx.ru/algo/big_integer

READ ALSO
Разница между rvalue и lvalue

Разница между rvalue и lvalue

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

278
Как присоединиться к SqlServer программно

Как присоединиться к SqlServer программно

Есть программа на C#, необходимо переписать код на C++В итоге мучаюсь с тем, что не могу подключиться к БД

205
Класс Матрица С++

Класс Матрица С++

Только начинаю изучать ООП, написал класс для матриц и перегрузил операторы ввода, вывода, +, -, =Программа работает до момента с сложением...

219
vector subscript out of range c чем это связано?

vector subscript out of range c чем это связано?

Ребят помогите с чем связана такая ошибка? Почему выходит за рэнджЗаметил во многих программах моих появляется когда использую большие числа

224