0

我正在尝试编写一个程序,在该程序中我输入一个数字,例如 891,并将这些数字中的每一个输入一个数组中 ,x[0] = 8例如x[1] = 9x[2] = 1

我试图使用递归来实现我的方法:

void calc(int val, int k)
{
    static int number = val;
    if((val/10))
    {
        calc(val/10, k--);
    }
    int x = number - val*pow(10, k);
    cout << x << ", k = " << k << " and number = " << number << endl;
}

int main()
{
    //write a program that converts a number to string
    int number;
    cout << "Enter a number: ";
    cin >> number;
    number = 891;
    int k = 0;

    //while(number/10 != 0)
        k = 2;

    calc(number, k);
}

基本上我正在尝试使用我的递归函数来尝试将数字分解为更精细的部分,但是我得到的输出为 (in val): 91, 1, -8019。有没有办法可以改进这一点,但保持结构?

4

2 回答 2

2

将数据放入数组和递归解决这个问题都需要一些指针运算。您需要提前分配数组,这意味着您需要知道位数。您还需要传递指向数组的指针,以便递归调用可以分配给它。下面是一个满足这两个要求的简短解决方案。

#import <math.h>
#import <iostream>
using namespace std;

void calc(int num, int* digs) {
  if (num > 0) {
    calc(num/10, digs-1); //recursive call, doing head recursion
    *digs = num %10; //assigning this digit
  }
}

int main() {
  //Get number from user
  int inputNumber;
  cout << "Input a number: ";
  cin >> inputNumber;

  int numDigits = log10(inputNumber) + 1;
  int outputArray[numDigits];

  //I give a pointer to the end of the array
  //This is because we are receiving digits from the end
  //So we traverse backwards from the end of the array
  calc(inputNumber, outputArray+numDigits-1);

  //Following is not logic, just printing
  for (int i=0; i < numDigits; i++) {
    cout << outputArray[i] << " ";
  }
  cout << endl;
}
于 2012-12-06T01:20:31.593 回答
1
void calc(int val)
{
    cout << "digit:"<<val % 10<< " and number = " << val << endl;
    if((val/10))
    {
        calc(val/10);
    }
}

这将打印出每个数字(看起来就像您在函数中尝试执行的操作)。

于 2012-12-06T00:50:19.440 回答