使用1,3,9,27…可以组成任意的正整数
输入一个数,转换成各个3的指数的+和-
package 算法.数学算法;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class 天平问题 {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
//输入一个数
int N = sc.nextInt();
//转换为三进制,并转换成
final String x =Integer.toString(N,3);
System.out.println(x);
//翻转后转换成字符数组
char[] arr =new StringBuilder(x).reverse().toString().toCharArray();
//容器处理 1, 0, -1
List<Integer> list =new ArrayList<>();
for (int i = 0; i <arr.length ; i++) {
if (arr[i]=='2'){
//-1插在开头
list.add(0,-1);
//最后一个字符
if (i==arr.length-1){
list.add(0,1);
}else {
++arr[i+1];
}
}else if (arr[i]=='3'){
list.add(0,0);
if (i==arr.length-1){
list.add(0,1);
}else {
++arr[i+1];
}
}else {
list.add(0,arr[i]-'0');
}
}
StringBuilder sb= new StringBuilder();
for (int i = 0; i < list.size() ; i++) {
if (list.get(i)==1)
sb.append("+").append((int) Math.pow(3,list.size()-i-1) );
if (list.get(i)==-1)
sb.append("-").append((int) Math.pow(3,list.size()-i-1) );
}
System.out.println(sb.substring(1));
}
}