首页 文章

解析用户将int输入到不工作的数字C中

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

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

可能是什么问题?

2 回答

  • 0

    你基本上有2个循环,因为递归性和一个因为while .

    递归调用是正确的,但你不应该把条件放入一段时间 . 有无限循环出现的地方 . 在你检查n为!= 0时,但是在那个体中没有修改n . 你应该有:

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

    在您的代码中,您没有在行vec(n / 10)处存储递归调用的值 . 如果你正在进行递归,则不需要放置while循环 . 你只需要做一个:递归或循环 .

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

    Loop

    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;
    }
    

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

    或者您可以尝试 recursive 方式:

    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;
    }
    

相关问题