两个数组的总和,结转操作C ++

时间:2017-08-24 05:53:29

标签: c++ arrays sum

初学者在这里,我被困住了。主程序提供给我们,我们应该编写3个函数。 readBig(),addBig()和printBig()。我坚持使用addBig()函数。它应该对两个数组求和,并执行进位操作。我无法弄清楚我哪里出错了。随身携带操作对我来说很有用。

感谢任何帮助/指示。

#include <iostream>
using namespace std;
//This program will test three functions capable of reading, adding,
//and printing 100-digit numbers.

// Do not change these function prototypes:
void readBig(int[]);
void printBig(int[]);
void addBig(int[], int[], int[]);

// This constant should be 100 when the program is finished.
const int MAX_DIGITS = 100;

//There should be no changes made to the main program when you turn it 
in.
int main(){
// Declare the three numbers, the first, second and the sum:
int num1[MAX_DIGITS], num2[MAX_DIGITS], sum[MAX_DIGITS];
bool done = false;
char response;
while (not done)
{
    cout << "Please enter a number up to "<<MAX_DIGITS<< " digits: ";
    readBig(num1);
    cout << "Please enter a number up to "<<MAX_DIGITS<< " digits: ";
    readBig(num2);
    addBig(num1, num2, sum);
    printBig(num1);
    cout << "\n+\n";
    printBig(num2);
    cout << "\n=\n";
    printBig(sum);
    cout << "\n";
    cout <<"test again?";
    cin>>response;
    cin.ignore(900,'\n');
    done = toupper(response)!='Y';
}
return 0;
}

//ReadBig will read a number as a string,
//It then converts each element of the string to an integer and stores 
it in an integer array.
//Finally, it reverses the elements of the array so that the ones digit 
is in element zero,
//the tens digit is in element 1, the hundreds digit is in element 2, 
etc.

void readBig(int num[])
{
for(int i = 0; i < MAX_DIGITS; i++){
    num[i] = 0;
}

string numStr;
getline(cin,numStr);

string temp;

//store into array
for (int i = 0; i < numStr.length(); i++){
    temp = numStr.at(i);
    num[i] = stoi(temp);
}

int arrayLength = MAX_DIGITS;
int temp2;

for (int i = 0; i < (arrayLength/2); i++){
    temp2 = num[i];
    num[i] = num[(arrayLength - 1) - i];
    num[(arrayLength - 1) - i] = temp2;
}
}


//AddBig adds the corresponding digits of the first two arrays and 
stores the answer in the third.
//In a second loop, it performs the carry operation.

void addBig(int num1[], int num2[], int sum[])
{
for (int i = 0; i < MAX_DIGITS; i++){
    sum[i] = num1[i] + num2[i];

    if (sum[i] > 9){
        sum[i] = sum[i] - 10;
        sum[i+1] = sum[i+1] + 10;
    }
}
}


//PrintBig uses a while loop to skip leading zeros and then uses a for 
loop to print the number.

void printBig(int array[])
{
int i = 0;

while (array[i] == 0){
    i++;
}
for (int j = i; j < MAX_DIGITS;j++){
    cout << array[j] << endl;
}

}

2 个答案:

答案 0 :(得分:0)

所以这个

   sum[i] = sum[i] - 10;
   sum[i+1] = sum[i+1] + 10;

最有可能是这个

   sum[i] = sum[i] - 10;
   sum[i+1] = sum[i+1] + 1;

由于它的下一个小数位,它不应该增加10

当你到达阵列中的最后一个单元格时

   sum[i+1] = sum[i+1] + 1;

这将超出界限,因此根据要求,您需要更改此

答案 1 :(得分:0)

看起来readBig函数不正确,它将最不重要的数字存储到num [numStr.length() - 1]中,在反转后它变为num [MAX_DIGITS -1 - (numStr.length() - 1],但是addNum假设最后一位是num [0]。

正确的变体:

void readBig(int num[])
{
  //clear num, read numStr...

  //store into array
  int count = 0;
  for (int i = numStr.length()-1; i >= 0; --i){
    temp = numStr.at(i);
    num[count++] = stoi(temp);
  }
|