在c ++中添加int数组时,试图弄清堆栈损坏的问题

时间:2014-11-06 19:02:12

标签: c++

我正在使用windows8 hp在visual studio 2013上工作。我的代码试图添加两个大小为[20]的int数组并输出总和。我知道我在外面或在某些地方,但我似乎无法找到。我是转换函数期间每个数组的第一个数字,我的答案[i]输出只有19位,应该是21位数。

#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;
//}     

1 个答案:

答案 0 :(得分: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;
}