一:题目要求
题目1:将非负十进制整数n转换成b进制。(其中b=2~16)
题目2:任何一个正整数都可以用2的幂次方表示。例如:
137=27+23+2^0
同时约定幂次方用括号来表示,即ab
可表示为a(b)。
由此可知,137可表示为:
2(7)+2(3)+2(0)
进一步:7=
22+2+20 (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,可以得到一个商和余数,再用商除以N,又会得到一个商和余数,如此进行,直到最后的商比N小时为止,将余数和最后的商从下向上倒序写就是结果。
题目2:
设输入的数为m,当m=1时,输出2(0);当m=2时,输出2;
设一个整数为p,让p*2接近,每乘一次2,n=n+1
若m==p/2时,说明m是一个2次幂,此时n为它的次幂,此时把n-1作为函数的参数,进行递归.
例如第一次递归:m=8,p=16,n=4,Fun(n-1) 输出2()
第二次递归:m=3,p=4,n=2 Fun(m-p/2) 输出2+
第三次递归:m=1 输出2(0)
所以输入整数8时,输出2(2+2(0))
三:代码实现
题目一
package 进制;
import java.util.Scanner;
public class turn {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
System.out.println("请输入十进制整数");
int a=input.nextInt();//a为十进制整数
System.out.println("请输入进制数(2--9)");
int b=input.nextInt();//b为转化的进制数(2—-9)
T(a,b);
}
public static void T(int a, int b) {
if((a/b)>0)
{
T(a/b,b);
System.out.print((a%b));
}
else
{System.out.print((a%b));}
}
}
题目二:
package zzz;
import
java.util.Scanner;
public class z {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
System.out.println("输入一个整数");
int m=input.nextInt();
Fun(m);
}
static void Fun(int m){
if(m == 2){ //特殊形式单独考虑,递归结束
System.out.print("2");
return;
}
if(m == 1){ //特殊形式单独考虑,递归结束
System.out.print("2(0)");
return;
}
int p = 1,n = 0; //n记录幂次,p是一个数,尽量与m接近
while(p <= m){ //使p与m最接近
p *= 2;
n++; //最接近时的幂
}
if(m == p/2){ //m正好是一个2次幂,无需带+
System.out.print("2(");
Fun(n - 1);
System.out.print(")");
}
else //m不正好是一个二次幂,需要表示成多项
{
if(p/2==2) //m是3时,一种特殊情况
{
System.out.print("2");
System.out.print("+");
Fun(m-p/2); //可以直接写为Fun(1),因为这种情况本身就是m=3时才使用
}
else
//m不是3时的情况
{
System.out.print("2(");
Fun(n - 1);
System.out.print(")+");
//加另外的项
Fun(m - p/2); //将剩余的再递归求解
}
}
}
}
实现效果: