一、题目描述
题目1:将非负十进制整数n转换成b进制。(其中b=2~16)
题目2:任何一个正整数都可以用2的幂次方表示。例如:
137=2^7
+2^3
+2^0
同时约定幂次方用括号来表示,即ab 可表示为a(b)。
由此可知,137可表示为:
2(7)+2(3)+2(0)
进一步:7= 2^2
+2+2^0 (21用2表示)
3=2+2^0
所以最后137可表示为:
2(2(2)+2+2(0))+2(2+2(0))+2(0)
又如:1315=2^10
+2^8 +2^5 +2+2^0
所以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表示(在表示中不能有空格)
输入格式 Input Format
一个正整数
输出格式 Output Format
符合约定的n的0,2表示(在表示中不能有空格)
样例输入 Sample Input
73
样例输出 Sample Output
2(2(2)+2)+2(2+2(0))+2(0)
二、题目分析:
①题目一:
把十进制n转换成b进制,可以使用除b取余法。
以二进制为例:
十进制的9用二进制表示为1001,其处理过程为
构造递归函数:x表示要转换的十进制数,f(x)为转换从二进制的结果,为一个0,1构成的序列。此次的“+”是连接的意思,那么二进制转换的递归函数为:
f(9)= f(9/2)+9%2=f(4)+1
=f(4/2)+4%2+1=1f(2)+01
=f(2/2)+2%2+01=1001
对于B进制,只要把2换成B就好了。
②题目二
先把n转换成二进制,记录n二进制为1的位的位数,即为指数,最低位为0;x表示输入整数;f(x)为输出序列;count为指数“+”为连接符。
三、算法构造
(1)题目一递归栈:
四、算法实现
(1)题目一:
public static String tonBinary(int n,int b) {
if(n==0) {
//递归出口
return "";
}
else if (n>0) {
if (n % b >= 10