Попытка выяснить проблему с поврежденным стеком при добавлении массивов int в c ++

0

Я работаю над visual studio 2013, с кодом Windows 8 hp.My пытается добавить два массива int размером [20] и вывести сумму. Я знаю, что я выхожу или где-то далеко, но я не могу найти, где. Я являюсь первой цифрой из каждого массива во время моей функции преобразования, а мой ответ [i] выводит только 19 цифр, когда должно быть 21digits.

#include<iostream>
#include<string>
#include<cmath>
#include<cstring>

using namespace   std;

int globalnum[20];

int total[21];
int i;
void convert(char[], int);
void add(int[], int[], int);
void printAnswer(int[], int);
int   main()
{
   char n1[20];
   char n2[20];
   int num1[20];
   int num2[20];
   int answer[21];

   cin >> n1 >> n2;
   int l1 = strlen(n1);
   int l2 = strlen(n2);
   int  max = fmax(l1, l2);

   convert(n1, l1);
   for (int i = 0; i < max - 1; i++)
      num1[i] = globalnum[i];
   for (int i = 0; i < max; i++)
      cout << num1[i];
   cout << endl;


   convert(n2, l2);
   for (int i = 0; i < max - 1; i++)
      num2[i] = globalnum[i];
   for (int i = 0; i < max; i++)
      cout << num2[i];
   cout << endl;


   add(num1, num2, max);
   for (int i = 0; i < max - 1; i++)
      answer[i] = total[i];
   //  printAnswer(answer,max);
   for (int i = 0; i < max - 1; i++)
      cout << answer[i];
   return 0;
}
void convert(char c1[], int size)
{

   for (int i = 0; i < size - 1; i++)
      globalnum[i] = c1[size - 1 - i] - '0';

}
void  add(int add1[], int  add2[], int s1)
{
   int  sum[21];
   int remain = 0;

   for (i = 0; i < s1 - 1; i++)// This starts to add the numbers.
   {

      sum[i] = (add1[s1 - 1 - i] + add2[s1 - 1 - i] + remain) % 10;

      if (add1[s1 - 1 - i] + add2[s1 - 1 - i] + remain >= 10)
         remain = 1;
      else
         remain = 0;
      if (remain != 0)
         total[s1 - 1 - i] = 1;
      else total[s1 - 1 - i] = 0;

      total[s1 - 1 - i] = sum[i];

   }
   if (remain != 0)
      total[0] = 1;
}



//void printAnswer(int t[], int b)
// {
//  for (int i = b - 1; i < 0; i--)

//       cout << t[i];

//   }
//   cout << endl;
//}     
  • 0
    Какой вклад вы используете?
  • 0
    fmax () ожидает двойные значения в качестве аргументов и возвращает двойное значение. почему ты используешь его на бронях?
Показать ещё 11 комментариев
Теги:

1 ответ

0

Слишком много проблем с вашим кодом, чтобы дать простой ответ. Возможно, проще работать в обратном направлении от рабочего кода. Вы не полностью определили проблему, но это было мое лучшее предположение о том, что вы пытаетесь сделать:

#include <algorithm>
#include <iostream>
#include <iterator>
#include <string>
#include <vector>

using namespace std;

vector<int> toInts(const string& s) {
    vector<int> v(s.size());
    transform(cbegin(s), cend(s), begin(v), [](int c) { return c - '0'; });
    return v;
}

int main() {
    string a, b;
    cin >> a >> b;
    auto n = toInts(a);
    auto m = toInts(b);
    const auto size = max(n.size(), m.size());
    n.resize(size);
    m.resize(size);
    vector<int> sums(size);
    transform(cbegin(n), cend(n), cbegin(m), begin(sums), plus<>{});
    copy(cbegin(sums), cend(sums), ostream_iterator<int>{cout, ", "});
    cout << endl;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню