<<Accessing Inherited Functions>> _HakerRank_C++

#include<iostream>using namespace std;class A{    public:        A(){            callA = 0;        }    private:        int callA;        void inc(){            callA++;        }    protected:        void func(int & a)        {            a = a * 2;            inc();        }    public:        int getA(){            return callA;        }};class B{    public:        B(){            callB = 0;        }    private:        int callB;        void inc(){            callB++;        }    protected:        void func(int & a)        {            a = a * 3;            inc();        }    public:        int getB(){            return callB;        }};class C{    public:        C(){            callC = 0;        }    private:        int callC;        void inc(){            callC++;        }    protected:        void func(int & a)        {            a = a * 5;            inc();        }    public:        int getC(){            return callC;        }};//enter code hereclass D : public A, B, C{int val;public://Initially val is 1D(){ val = 1;}//Implement this function    void update_val(int new_val)    {        int a = new_val;        while(new_val!=0)        {            if(val==a)            {                break;            }                        if(new_val%2==0)            {                A::func(val);                new_val/=2;            }            else if(new_val%3==0)            {                B::func(val);                new_val/=3;            }            else if(new_val%5==0)            {                C::func(val);                new_val/=5;            }        }    }         //For Checking Purpose void check(int); //Do not delete this line.};

You are given three classes A, B and C. All three classes implement their own version of func.

In class A, func multiplies the value passed as a parameter by 2:

class A{    public:        A(){            callA = 0;        }    private:        int callA;        void inc(){            callA++;        }    protected:        void func(int & a)        {            a = a * 2;            inc();        }    public:        int getA(){            return callA;        }};

In class B, func multiplies the value passed as a parameter by 3:

class B{    public:        B(){            callB = 0;        }    private:        int callB;        void inc(){            callB++;        }    protected:        void func(int & a)        {            a = a * 3;            inc();        }    public:        int getB(){            return callB;        }};

In class C, func multiplies the value passed as a parameter by 5:

class C{    public:        C(){            callC = 0;        }    private:        int callC;        void inc(){            callC++;        }    protected:        void func(int & a)        {            a = a * 5;            inc();        }    public:        int getC(){            return callC;        }};

You are given a class D:

class D {int val;public://Initially val is 1 D() { val = 1; } //Implement this function void update_val(int new_val) { } //For Checking Purpose void check(int); //Do not delete this line.};

You need to modify the class D and implement the function update_val which sets D's val to new_val by manipulating the value by only calling the func defined in classes A, B and C.

It is guaranteed that new_val has only 2, 3 and 5 as its prime factors.

Input Format
Implement class D's function update_val. This function should update D's val only by calling A, B and C's func.

Constraints
1 ≤ new_val ≤ 10000
Note: The new_val only has 2, 3 and 5 as its prime factors.

Sample Input
new_val = 30

Sample Output
A's func will be called once.
B's func will be called once.
C's func will be called once.

Explanation
Initially, val = 1.
A's func is called once:
val = val*2
val = 2

B's func is called once:
val = val*3
val = 6

C's func is called once:
val = val*5
val = 30


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章