学位:多项式(预期用户输入的奇数情况)

时间:2013-08-01 07:21:56

标签: c++ polynomial-math

我有一个多项式类,提示用户输入要放入整数向量的值(vector<int> vect_poly)。我试图想办法检测多项式的程度,以便用户在while循环中执行类似的操作:

0↵0↵0↵0↵4↵0↵0↵0↵0←x ^ 4(度= 4)

(OR)

0↵0↵0↵0↵0↵0↵0↵0↵0←(度= 0)

(OR)

4↵0↵0↵0↵0↵0↵0↵0↵0←x ^ 0(度= 0)

(OR)

0↵0↵0↵0↵0↵0↵0↵0↵4←x ^ 8(度= 8)

我真的只是在寻找一个灵巧的算法。


这个怎么样:

 int degree()
 {
 int d = 0;
    for ( int i = 0; i < 100; i++ )
       if ( coef[i] != 0 ) d = i;
          return d;
 }

4 个答案:

答案 0 :(得分:0)

您可以使用局部变量来跟踪最大值,每次用户按Enter键时,您将其输入与当前最大值进行比较。

int max=0;
while(1)
{
    int input=0;
    std::cin>>input;
    if(input>max)
    {
        max=input;
    }
}

当然有一些突破条件所以循环不会永远运行。您可以尝试在if语句中弄乱三元运算符,但我认为没什么价值。

编辑:如果你想尽快知道先前生成的但基本上随机的向量的最后设定值(即度数),运行这样的循环:

int max=0;
for(int k= myvec.size()-1; k>=0; k--)
{
    if(myvec[k]>0)
    {
         max=k;
         break;
    }
}

答案 1 :(得分:0)

我看到两个选项:

  1. 只需将输入复制到矢量中,然后搜索最后一个非零并在此之后截断矢量。

  2. 将输入复制到临时向量中,每次输入非零值时,将临时向量移动附加到vect_poly,如下所示:

    std::vector<int> temp;
    int n;
    while (std::cin >> n) {
      temp.push_back(n);
      if (n != 0) {
        vect_poly.insert(vect_poly.end(), temp.begin(), temp.end());
        temp.clear();
      }
    }
    

    这样,除了vect_poly中的尾随零序列之外,你得到的所有内容。

  3. 编辑

    3。您还可以将0保留在计数器中:

    int n;
    size_t zeroes = 0;
    while (std::cin >> n) {
      if (n == 0) {
        ++zeroes;
      } else {
        vect_poly.insert(vect_poly.end(), zeroes, 0);
        vect_poly.push_back(n);
        zeroes = 0;
      }
    }
    

答案 2 :(得分:0)

如果你有这个向量,其中用户输入了系数的值,你可以遍历从索引0到最后一个元素的向量(假设用户将以正确的顺序输入系数的值),并且只保存最后的值其值不为零的索引。

 int degreeOfPolynomial=0;
 for(int i=0 ; i < vect_poly.size() ; i++)
 {
   if(vect_poly[i] != 0)
   degreeOfPolynomial = i;
 } 

执行上面部分代码后, degreeOfPolynomial 将存储多项式次数的正确值。

答案 3 :(得分:0)

为什么不跟踪它?

std::vector<int> polynomial;
int degree = 0;
int inputs = 0;
int coefficient;
while (std::cin >> coefficient)
{
    polynomial.push_back(coefficient);
    if (coefficient != 0)
    {
       degree = inputs;
    }
    inputs++;
}