我正在尝试编写一个程序,我在其中输入输入数字,
例如,例如,在数组中输入这些数字中的每一个
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);
}
基本上我正在尝试使用我的递归函数来尝试打破
在其更精细的部分编号,但我得到(val
)的输出:
91,1,-8019。有没有办法可以改善这一点,但保持
结构?
答案 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);
}
}
这将打印出每个数字(看起来就像你在函数中尝试做的那样)。