Making a square() function without x*x in C++

后端 未结 7 2092
攒了一身酷
攒了一身酷 2020-12-31 14:44

I am self-studying C++ and the book \"Programming-Principles and Practices Using C++\" by Bjarne Stroustrup. One of the \"Try This\" asks this:

Implement square() wi

相关标签:
7条回答
  • 2020-12-31 15:15

    Mats Petersson stole the idea out of my head even before I thought to think it.

    #include <iostream>
    
    template <typename T>
    T square(T x) {
        if(x < 0) x = T(0)-x;
        T sum{0}, s{x};
        while(s) {
            if(s & 1) sum += x;
            x <<= 1;
            s >>= 1;
        }
        return sum;
    }
    
    int main() {
        auto sq = square(80);
        std::cout << sq << "\n";
    }
    
    0 讨论(0)
  • 2020-12-31 15:19

    You can include <math.h> or <cmath> and use its sqrt() function:

    #include <iostream>
    #include <math.h>
    int square(int);
    
    int main()
    {
       int no;
       std::cin >> no;
    
       std::cout << square(no);
       return 0;
    }
    
    int square(int no)
    {
       return pow(no, 2);
    }
    
    0 讨论(0)
  • 2020-12-31 15:26

    In term of the running time complexity,your implementation is clear and simply enough,its running time is T(n)=Θ(n) for input n elements.Of course you also can use Divide-and-Conquer method,assuming split n elements to n/2:n/2,and finally recursive compute it then sum up two parts,that running time will be like T(n)=2T(n/2)+Θ(n)=Θ(nlgn),we can find its running time complexity become worse than your implementation.

    0 讨论(0)
  • 2020-12-31 15:27
      //Josef.L
      //Without using multiplication operators.
    
    int square (int a){
         int b = 0; int c =0;
        //I don't need to input value for a, because as a function it already did it for me.
        /*while(b != a){
                b ++;
            c = c + a;}*/
        for(int b = 0; b != a; b++){  //reduce the workload.
            c = c +a;
            //Interesting, for every time b is not equal to a, it will add one to its value:
            //In the same time, when it add one new c = old c + input value will repeat again.
            //Hence when be is equal to a, c which intially is 0 already add to a for a time.
            //Therefore, it is same thing as saying a * a.
        }
        return c;
    }
    
    int main(void){
        int a;
        cin >>a;
        cout <<"Square of: "<<a<< " is "<<square(a)<<endl;
    return 0;
    }
    
    //intricate.
    
    
    0 讨论(0)
  • 2020-12-31 15:28
    int square(int x) {
        int result = { 0 };
        int *ptr = &result;
        for (int i = 0; i < x; i++) {
            *ptr = *ptr + x;
        }
        return *ptr;
    }
    

    I am reading that book atm. Here is my solution.

    0 讨论(0)
  • 2020-12-31 15:29
     int square(int n) 
     { 
            // handle negative input 
            if (n<0) n = -n; 
    
             // Initialize result 
             int res = n; 
    
              // Add n to res n-1 times 
              for (int i=1; i<n; i++) 
              res += n; 
    
          return res; 
     } 
    
    0 讨论(0)
提交回复
热议问题