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

Storing individual numbers of an int in an array

本文关键字:数字 int 数组 存储      更新时间:2023-10-16

我试图编写一个程序,在其中我接受一个输入数字,示例 891 并在数组中输入每个数字,例如 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.有没有办法我可以改进这一点,但要保持结构?

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

#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;
}
void calc(int val)
{
    cout << "digit:"<<val % 10<< " and number = " << val << endl;
    if((val/10))
    {
        calc(val/10);
    }
}

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