定义:将一个数分为左右两部分,分别成为两个新的数。左右两部分必须满足以下两点:
1.左边和右边至少存在一位。
2.左边的数每一位相乘如果等于右边的数每一位相乘,则称这个数为平衡数。
话不多说,此题有两种解法,首先给出O(n2)的解法。
//平衡数的判断:将一个数分成左右两部分,分别成为两个新数。
//左右两部分必须满足一下两点:1.左边和右边至少存在一个一位。2.左边的数每一位相乘如果等于右边的每一位相乘
import java.util.Scanner;
public class BalanceNumber {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
while(in.hasNext()){
int num = in.nextInt();
String str1 = num + "";
char[] ch = str1.toCharArray();
System.out.println(judgeBalance(ch));
}
}
public static String judgeBalance(char[] ch){
int n = ch.length;
long n1,n2;
for(int i = 1; i < n; i++){
n1 = n2 = 1;
for(int j = 0; j < i; j++){
n1 *= ch[j] - '0'; //字符型转化为整型
}
for(int j = i; j < n; j++){
n2 *= ch[j] - '0';
}
if(n1 == n2){
return "YES";
}
}
return "NO";
}
}
import java.util.Scanner;
public class IsBalance {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
while(in.hasNext()){
int n = in.nextInt();
System.out.println(isBalance(n));
}
}
public static String isBalance(int n){
String s = String.valueOf(n);
if(s.length() == 1){
return "NO";
}
int i = 0, j = s.length() - 1;
int data1 = s.charAt(i) - '0';
int data2 = s.charAt(j) - '0';
while(i < j){
if(data1 < data2){
i++;
data1 *= s.charAt(i) - '0';
}else if (data1 > data2) {
j--;
data2 *= s.charAt(j) - '0';
}else {
if(j - i == 1){
return "YES";
}else {
data1 *= s.charAt(i++) - '0';
data2 *= s.charAt(j--) - '0';
}
}
}
return "NO";
}
}