题目分析
题目一:
将任意数转换为n 进制
题目二:
任何一个正整数都可以用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)
算法设计
题目一:
先求出最大次项,在依次求其次数的系数即可
其中求最大次项的函数
public static int MAX(int jinzhi,int number)
{
int i=0;
while(true) {
if(Math.pow(jinzhi, i)<=number&&Math.pow(jinzhi, 1+i)>number)
{
break;
}
i++;
}
return i;
}
所有的求出的系数都将进入容器Arraylist中
求出一个系数就将其添加到list中
然后当只有最后的个位数时跳出递归
下面为递归体
public static ArrayList convert(int MAX,int number,int jinzhi,ArrayList list)
{
if(MAX0)
{ for(int i=0;i<jinzhi;i++)
{
if(inumber)
{
list.add(i);
return list;
}
}
}
for(int i=0;i<jinzhi;i++)
{
if(i*Math.pow(jinzhi,MAX)<=number&&(i+1)*Math.pow(jinzhi,MAX)>number)
{
list.add(i);
number=(int) (number-i*Math.pow(jinzhi,MAX));
--MAX;
return convert( MAX, number, jinzhi,list);
}
}
return null;
}
非递归设计
public static ArrayList convert(int MAX,int number,int jinzhi,ArrayList list)
{ boolean falg =true;
while(falg) {
if(MAX0)
{ for(int i=0;i<jinzhi;i++)
{
if(inumber)
{
list.add(i);
falg=false;
}
}
}else {
for(int i=0;i<jinzhi;i++)
{
if(i*Math.pow(jinzhi,MAX)<=number&&(i+1)*Math.pow(jinzhi,MAX)>number)
{
list.add(i);
number=(int) (number-i*Math.pow(jinzhi,MAX));
--MAX;
break;
}
}
}
}
return list;
}
题目二:
题目二采用的递归方法将数用2的2次方和一次方及零次方表示
递归体:
public static String Translate(ArrayList list)
{
if(list.size()<=3)
{ StringBuffer a=new StringBuffer();
if(list.size()==3)
{
if(list.get(0)==1)
{
a.append("2"+"("+"2"+")");
}
if(list.get(1)==1)
{
a.append("+"+"2"+"("+"1"+")");
}
if(list.get(2)==1)
{
a.append("+"+"2"+"("+"0"+")");
}
}
if(list.size()==2)
{
if(list.get(0)==1)
{
a.append("2"+"("+"1"+")");
}
if(list.get(1)==1)
{
a.append("+"+"2"+"("+"0"+")");
}
}
if(list.size()==1)
{
if(list.get(0)==1);
{
a.append("2"+"("+"0"+")");
}
}
String b=a.toString();
return b;
}
StringBuffer l=new StringBuffer();
for(int i=0;i<list.size()-3;i++)
{
if(list.get(i)==1)
{
if(i==list.size()-4&&list.get(list.size()-3)==0&&list.get(list.size()-2)==0&&list.get(list.size()-1)==0)
{
l.append("2"+"("+Translate(returnlist(list.size()-1-i))+")");
}else
{l.append("2"+"("+Translate(returnlist(list.size()-1-i))+")"+"+");}
}
}
if(list.get(list.size()-3)==1)
{
l.append("2"+"("+"2"+")");
}
if(list.get(list.size()-2)==1)
{
if(list.get(list.size()-3)==1)
{
l.append("+");
}
l.append("2"+"("+"1"+")");
}
if(list.get(list.size()-1)==1)
{
if(list.get(list.size()-2)==1)
{
l.append("+");
}
l.append("2"+"("+"0"+")");
}
return l.toString();
}
}
题目二·源代码
package jinzhi;
import java.util.ArrayList;
import java.util.Scanner;
/**
* @author 张奥
* 2019.6.3.
*
*/
public class jiformatrun {
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
System.out.println("please input number");
int number=s.nextInt();
//zhuanhuan( number);
System.out.println(Translate(returnlist( number)));
}
public static void zhuanhuan(int number)
{
int MAX=MAX(2,number);
ArrayList<Integer> list=new ArrayList<Integer>();
System.out.println(convert( MAX, number, 2, list));
}
public static ArrayList<Integer> returnlist(int number)
{
int MAX=MAX(2,number);
ArrayList<Integer> list=new ArrayList<Integer>();
return convert( MAX, number, 2, list);
}
public static int MAX(int jinzhi,int number)
{
if(number==0)
{
return 0;
}
int i=0;
while(true) {
if(Math.pow(jinzhi, i)<=number&&Math.pow(jinzhi, 1+i)>number)
{
break;
}
i++;
}
return i;
}
public static ArrayList<Integer> convert(int MAX,int number,int jinzhi,ArrayList<Integer> list)
{
if(MAX==0)
{ for(int i=0;i<jinzhi;i++)
{
if(i==number)
{
list.add(i);
return list;
}
}
}
for(int i=0;i<jinzhi;i++)
{
if(i*Math.pow(jinzhi,MAX)<=number&&(i+1)*Math.pow(jinzhi,MAX)>number)
{
list.add(i);
number=(int) (number-i*Math.pow(jinzhi,MAX));
--MAX;
return convert( MAX, number, jinzhi,list);
}
}
return null;
}
public static String Translate(ArrayList<Integer> list)
{
if(list.size()<=3)
{ StringBuffer a=new StringBuffer();
if(list.size()==3)
{
if(list.get(0)==1)
{
a.append("2"+"("+"2"+")");
}
if(list.get(1)==1)
{
a.append("+"+"2"+"("+"1"+")");
}
if(list.get(2)==1)
{
a.append("+"+"2"+"("+"0"+")");
}
}
if(list.size()==2)
{
if(list.get(0)==1)
{
a.append("2"+"("+"1"+")");
}
if(list.get(1)==1)
{
a.append("+"+"2"+"("+"0"+")");
}
}
if(list.size()==1)
{
if(list.get(0)==1);
{
a.append("2"+"("+"0"+")");
}
}
String b=a.toString();
return b;
}
StringBuffer l=new StringBuffer();
for(int i=0;i<list.size()-3;i++)
{
if(list.get(i)==1)
{
if(i==list.size()-4&&list.get(list.size()-3)==0&&list.get(list.size()-2)==0&&list.get(list.size()-1)==0)
{
l.append("2"+"("+Translate(returnlist(list.size()-1-i))+")");
}else
{l.append("2"+"("+Translate(returnlist(list.size()-1-i))+")"+"+");}
}
}
if(list.get(list.size()-3)==1)
{
l.append("2"+"("+"2"+")");
}
if(list.get(list.size()-2)==1)
{
if(list.get(list.size()-3)==1)
{
l.append("+");
}
l.append("2"+"("+"1"+")");
}
if(list.get(list.size()-1)==1)
{
if(list.get(list.size()-2)==1||list.get(list.size()-3)==1)
{
l.append("+");
}
l.append("2"+"("+"0"+")");
}
return l.toString();
}
}
在这里插入代码片
测试截屏
题目二