首页 > 试题广场 >

平衡数

[编程题]平衡数
  • 热度指数:2381 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
牛牛在研究他自己独创的平衡数,平衡数的定义是:将一个数分成左右两部分,分别成为两个新的数。
左右部分必须满足以下两点:
1,左边和右边至少存在一位。
2,左边的数每一位相乘如果等于右边的数每一位相乘,则这个数称为平衡数。
例如:1221这个数,分成12和21的话,1*2=2*1,则称1221为平衡数,再例如:1236这个数,可以分成123和1*2*3=6,所以1236也是平衡数。而1234无论怎样分也不满足平衡数。

输入描述:
输入一个正整数(int范围内)。


输出描述:
如果该数是平衡数,输出 "YES", 否则输出 "NO"。
示例1

输入

1221
1234

输出

YES
NO
public class Main {
    public static void main(String[] args) {
        java.util.Scanner in = new java.util.Scanner(System.in);
        String str = in.nextLine();
        if (str == null || str.length() == 0) {
            System.out.println("请输入参数");
            return;
        }
        System.out.println(isBalance(str) ? "YES" : "NO");
    }
    private static boolean isBalance(String num) {
        if (num.length() < 2) {
            return false;
        }
        //检测0,如果一个0,为false;如果多个0,为true
        int firstZero = num.indexOf('0');
        if (firstZero > -1) {
            int lastZero = num.lastIndexOf('0');
            if (firstZero == lastZero) {
                return false;
            } else {
                return true;
            }
        }
        //左右两边计算乘积,值小的一方移位
        char[] arr = num.toCharArray();
        int left = 0, right = arr.length - 1, leftv = arr[left] - 48, rightv = arr[right] - 48;
        while (left < right - 1) {
            if (leftv <= rightv) {
                leftv *= arr[++left] - 48;
            } else {
                rightv *= arr[--right] - 48;
            }
        }
        return leftv == rightv;
    }
}
编辑于 2018-01-25 20:43:14 回复(0)
import java.util.Scanner;

public class Main{

public static void main(String[] args){

    Scanner sc = new Scanner(System.in);

    while(sc.hasNext()){

    int n =sc.nextInt();

    String str= String.valueOf(n);

    String left ="";

    String right ="";

    boolean flag = false;

    for(int i=1;i<str.length();i++){

    left=str.substring(0,i);

    right=str.substring(i,str.length());

    if(check(left,right)){

    flag=true;

    }

    }

    if(flag){

    System.out.println("YES");

    }

    else{

    System.out.println("NO");

    }

    }

 }

private static boolean check(String left, String right) {

char [] arr1 = left.toCharArray();

char [] arr2 = right.toCharArray();

int sum1=1,sum2=1;

for(int i=0;i<arr1.length;i++){

sum1*=Integer.valueOf(arr1[i]+"".toString());

}

for(int i=0;i<arr2.length;i++){

sum2*=Integer.valueOf(arr2[i]+"".toString());

}

// System.out.println(sum1);

// System.out.println(sum2);

if(sum1==sum2){

return true;

}

else{

return false;

}

}

}

发表于 2017-07-09 18:01:10 回复(0)
package com.violin.newcoderSecondFullConuntry;
import java.util.Scanner;

public class 平衡数 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String str= scan.nextLine();
        if(str.length()<2){
            System.out.println("NO");
            return;
        }
        int start=0,end =str.length()-1;
        boolean flag=false;
        while(start<end){
            int temp = (start+end)/2;
            long ptr = change(str.substring(0,temp+1));
            long aft = change(str.substring(temp+1));
            if(ptr>aft){
                end = temp-1;
            }else if(ptr<aft){
                start = temp+1;
            }else{
                flag = true;
                break;
            }
        }
        System.out.println(flag?"YES":"NO");
        
        
    }

    private static long change(String str) {
        // TODO Auto-generated method stub
        long res =1;
        for(char ch : str.toCharArray()){
            if(ch=='0'){
                return 0;
            }else{
                res*=ch-'0';
            }
        }
        return res;
    }
}
//排列是有顺序可寻找的 可以二分

发表于 2017-04-04 19:08:14 回复(0)
import java.util.Scanner;
import java.lang.*;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		int number;				
		int r1;
		int r2;
		while(in.hasNext())
		{
			boolean PHS = false;
			number = in.nextInt();
			String str = String.valueOf(number);
			if (number>=10)
			{
				for (int i = 0; i<str.length()-1; i++)
				{
					r1 = 1;
					r2 = 1;
					for (int j = 0; j<=i;j++)
					{
						String perstr1 = str.substring(j,j+1);
						int num1 = Integer.parseInt(perstr1);
						r1 = r1 * num1;
					}
					for (int k = i+1;k<str.length();k++)
					{
						String perstr2 = str.substring(k,k+1);
						int num2 = Integer.parseInt(perstr2);
						r2 = r2 * num2;
					}
					if (r1 == r2)
					{
						PHS = true;
						break;
					}
				}
				if (PHS)
				{
					System.out.println("YES");
				}
				else
				{
					System.out.println("NO");
				}
			}
			else
			{
				System.out.println("NO");
			}
		}		
	}
}


发表于 2017-03-24 10:10:09 回复(0)