首页 > 代码库 > 结题报告——2018级2016第二学期第四周作业10.2

结题报告——2018级2016第二学期第四周作业10.2

 

C:〖NOIP1998〗2的幂次方

 

描述

任何一个正整数都可以用2的幂次方表示。例如:137=27+23+20

   同时约定方次用括号来表示,即ab 可表示为a(b)。

    由此可知,137可表示为:2(7)+2(3)+2(0)

   进一步:7= 22+2+20   (21用2表示)

            3=2+20  

    所以最后137可表示为:

           2(2(2)+2+2(0))+2(2+2(0))+2(0)

   又如:1315=210 +28 +25 +2+1

   所以1315最后可表示为:

2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)

 

输入

一个正整数(n≤20000)

输出

符合约定的n的0,2表示(在表示中不能有空格)。

样例输入

137

样例输出

2(2(2)+2+2(0))+2(2+2(0))+2(0)

 分析:

对于这题的思路,

一开始我就在想,

可不可以先把它化为2进制,

然后使用找规律的方法,

依次填入string,

用函数递归递推来完成,

2进制的方法我首先找到了,

用一个a数组来存储,

过程自然不必多说,

while (m>0) {

                a[js++]=m%2;

                m/=2;

            }

后来在杨老师程序的基础上,

我发现,在化二进制之前,

可以先进行特殊性判断,

如果这个数为0,string中直接填入0;

如果这个数为2,string中直接填入2;

进行化二进制之后,

也就是等于判断奇偶,

for (int i=js-1;i>=0;i--)

                if (a[i]!=0){

                    if (i!=1){

                    if (i==js-1) ans=ans+"2("+work(i)+")";

                            else ans=ans+"+2("+work(i)+")";

                            }

                            else {

                                if (i==js-1) ans=ans+"2";

                            else ans=ans+"+2";//连接式子

                            }

                }

 

        }

最后return ans

结题报告——2018级2016第二学期第四周作业10.2