2016-11-05 244 views

回答

-1
int lcm(int a,int b){ 

    static int temp = 1; 

    if(temp % b == 0 && temp % a == 0) 
     return temp; 
    temp++; 
    lcm(a,b); 

    return temp; 
} 
+0

我将如何转换这个,以便它将接受一个int数组,其中a是? – user3832668

0

您已将此标记为C++。这里有一个可能的C++方法,用std :: vector来做到这一点。

class T435_t 
    { 
    private: 
     std::vector<int> iVec; 

     void show(std::string label) 
     { 
      std::cout << label << std::endl; 
      for (auto iv : iVec) 
       std::cout << " iVec " << std::setw(6) << iv << std::endl; 
      std::cout << std::endl; 
     } 

    public: 

     T435_t() // : std::vector<int> iVec - default ctor ok 
     { 
     } 

     ~T435_t() { } 

     int exec() 
     { 
      // test data 
      iVec.push_back(5); 
      iVec.push_back(10); 
      iVec.push_back(15); 
      iVec.push_back(20); 
      iVec.push_back(25); 

      show("\n ---- ---"); 

      int retVal = LCM(1); // start tmp at 1 

      std::cout << " LCM " << std::setw(6) << retVal << std::endl; 

      return(0); 
     } 

    private: 

     inline bool componentOf (int tmp) 
     { 
      size_t count = 0; 
      for (auto iv : iVec) 
      { 
       if (0 == (tmp % iv)) 
        ++count; // how many elements of vec are component 
      } 
      return (count == iVec.size()); // when all are 
     } 

     // recursion 
     int LCM(int tmp) 
     { 
      if (componentOf(tmp)) // recursion termination clause 
       return (tmp); 

      return (LCM (++tmp)); // probably tail recursion with -O3 
     } 
    }; 


int main(int argc, char* argv[]) 
{ 
    std::cout << "argc: " << argc << std::endl; 
    for (int i=0; i<argc; i+=1) std::cout << argv[i] << " "; 
    std::cout << std::endl; 

    setlocale(LC_ALL, ""); 
    std::ios::sync_with_stdio(false); 

    T435_t t435; // C++ uses classes! 
    int retVal = t435.exec(); 

    std::cout << "\nFINI " << std::endl; 
    return(retVal); 
} 

输出:

---- --- 
iVec  5 
iVec  10 
iVec  15 
iVec  20 
iVec  25 

LCM  300 

输出与5,6编码成IVEC

---- --- 
iVec  5 
iVec  6 

LCM  30 
+0

注意矢量的使用如何简化代码......计数和插入索引都是为你照顾的。 –

+0

请注意,对于“show()”和方法“componentOf()”,向量和“for(auto iv:iVec)”的使用简化了iVec内容的扫描。 –

+0

请注意递归代码“LCM()”如何完全访问类的任何数据属性...例如,我不需要通过递归传递'array'ptr和长度,LCM()只需访问实例iVec。我也不需要通过递归传递'tmp',但我认为它看起来更熟悉它。 –