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;i 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;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函数)。