解析用户输入的 int 到数字中不起作用C++


vector<int> vec(unsigned int n)
{     
  vector<int> num;
  while (n != 0)
  {
    num.push_back(n%10);
    vec(n / 10);
  }
  return num;
}

这是一个将用户输入的 int 解析为数字的函数。我正在对返回向量的函数进行递归调用。我检查直到数字的值变为零。但是当我运行它时,它进入了一个无限循环。

可能是什么问题?

你基本上有 2 个循环,1 个因为递归,一个是因为 while。

递归调用是正确的,但您不应该将条件放入一段时间。这就是无限循环出现的地方。在您检查 n 是否为 != 0 时,但 n 在该主体中没有修改。您应该具备:

if (n != 0)
{
num.push....
vec(n/10);
}
return num;

在代码中,您没有将递归调用的值存储在行 vec(n/10) 处。如果你正在做递归,就没有必要把 while 循环。你只需要做一个:递归或循环。

这是您可能想要尝试的代码:

循环

vector<int> vec(unsigned int n)
{
    vector<int> ans;
    while(n!=0)
    {
        ans.push_back(n%10);
        n=n/10;
    }
    reverse(ans.begin(),ans.end());
    return ans;
}

在这里,您需要反转向量以正确的顺序(从左到右)。

或者你可以尝试递归方式:

vector<int> vec1(unsigned int n)
{
    vector<int> ans;
    if(n==0)
        return ans;
    ans.push_back(n%10);
    vector<int> tmp=vec1(n/10);
    ans.insert(ans.end(),tmp.begin(),tmp.end());
    return ans;
}

并且仍然需要颠倒它,您的vec函数应该调用此vec1函数:

vector<int> vec(unsigned n)
{
    vector<int> ans=vec1(n);
    reverse(ans.begin(),ans.end());
    return ans;
}

最新更新