在数组中存储int的单个数字

时间:2012-12-06 00:43:23

标签: c++ arrays pointers recursion

我正在尝试编写一个程序,我在其中输入输入数字, 例如,例如,在数组中输入这些数字中的每一个 x[0] = 8x[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);
}

基本上我正在尝试使用我的递归函数来尝试打破 在其更精细的部分编号,但我得到(val)的输出: 91,1,-8019。有没有办法可以改善这一点,但保持 结构?

2 个答案:

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

答案 1 :(得分:1)

void calc(int val)
{
    cout << "digit:"<<val % 10<< " and number = " << val << endl;
    if((val/10))
    {
        calc(val/10);
    }
}

这将打印出每个数字(看起来就像你在函数中尝试做的那样)。