Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在数组中存储整数的单个数字_C++_Arrays_Pointers_Recursion - Fatal编程技术网

C++ 在数组中存储整数的单个数字

C++ 在数组中存储整数的单个数字,c++,arrays,pointers,recursion,C++,Arrays,Pointers,Recursion,我试着写一个程序,在其中输入一个数字, 例如,在数组中输入这些数字 x[0]=8,x[1]=9和x[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 <<

我试着写一个程序,在其中输入一个数字, 例如,在数组中输入这些数字
x[0]=8
x[1]=9
x[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);
}
void计算(int val,int k)
{
静态整数=val;
如果((val/10))
{
计算值(val/10,k-);
}
int x=数字-val*pow(10,k);
cout
无效计算(int val)
{
cout
无效计算(int val)
{

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

#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;
}
#导入
#进口
使用名称空间std;
无效计算(整数,整数*digs){
如果(数值>0){
计算(num/10,digs-1);//递归调用,执行头递归
*digs=num%10;//分配此数字
}
}
int main(){
//从用户处获取号码
输入整数;
cout>inputNumber;
int numDigits=log10(inputNumber)+1;
int outputArray[numDigits];
//我给出一个指向数组末尾的指针
//这是因为我们从末尾接收数字
//所以我们从数组的末尾向后遍历
计算(输入编号、输出阵列+numDigits-1);
//以下不是逻辑,只是打印
对于(int i=0;icout将数据放入数组和递归解决此问题都需要一点指针算法。
您需要提前分配数组,这意味着您需要知道位数。您还需要传递指向数组的指针,以便递归调用可以分配给它。
下面是一个符合这两个要求的简短解决方案

#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;
}
#导入
#进口
使用名称空间std;
无效计算(整数,整数*digs){
如果(数值>0){
计算(num/10,digs-1);//递归调用,执行头递归
*digs=num%10;//分配此数字
}
}
int main(){
//从用户处获取号码
输入整数;
cout>inputNumber;
int numDigits=log10(inputNumber)+1;
int outputArray[numDigits];
//我给出一个指向数组末尾的指针
//这是因为我们从末尾接收数字
//所以我们从数组的末尾向后遍历
计算(输入编号、输出阵列+numDigits-1);
//以下不是逻辑,只是打印
对于(int i=0;i你的数组在哪里?为什么
cin>>number;number=891;
?为什么
int k=0;k=2;
?为什么
static int number=val;
?递归肯定会起作用,但这个问题不需要递归。只使用一个循环会占用更少的计算机资源。你说的“改进”是什么意思?它有助于定义您的目标。我对“k”的怀疑是,它向数组中提供了一个索引来存储数字,而OP试图用它进行长时间的模运算(pow函数)。数组在哪里?为什么
cin>>number;number=891;
?为什么
int k=0;k=2;
?为什么
static int number=val;
?递归肯定会起作用,但这个问题不需要递归。只使用一个循环就可以使用更少的计算机资源。您所说的“改进”是什么意思?它有助于定义您的目标。我对“k”的怀疑是,它向数组中提供了一个索引来存储数字,而OP试图用它进行长时间的模运算(pow函数)。