首页 > 试题广场 >

平衡数

[编程题]平衡数
  • 热度指数: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
// javascript暴力解法
while(line = readline()) {
    print(numCheck(line))
}

function numCheck(num) {
    if(num.length === 0) return 'NO'
    let str = num.toString()
    let len = num.length
    let returnStr = 'NO'
    for(let i = 1; i < num.length; i ++) {
        let left = str.substring(0, i)
        let rigth = str.substring(i, len)
        // console.log('======', left, rigth)
        let leftNum = 1
        let rightNum = 1
        for(let j = 0; j < left.length; j ++) {
            leftNum = leftNum * parseInt(left[j])
        }
        for(let z = 0; z < rigth.length; z ++) {
            rightNum = rightNum * parseInt(rigth[z])
        }
        // console.log('+++++++++', leftNum, rightNum)
        if(leftNum === rightNum) return returnStr = 'YES'
    }
    return returnStr
}
发表于 2022-08-29 16:06:34 回复(0)
while(num=parseInt(readline())){
    var arr = num.toString().split('');
    if(arr.length > 1){
    for(var i=0;i<arr.length-1;i++){
        var b =arr.slice(0,i+1);
        var c = arr.slice(i+1);
        var resb = 1;
        var resc = 1;
        for(var k in b){
            resb = resb * b[k];
        }
        for(var n in c){
            resc = resc * c[n];
        }
        if(resb == resc){
            console.log('YES');
            break;
        }else if((i==arr.length-2) && (resb!=resc)){
            console.log('NO');
        }
    }
    }else {
        console.log('NO');
    }
}
发表于 2019-03-11 14:33:06 回复(0)