首页 > 试题广场 >

流程控制

[编程题]流程控制
  • 热度指数:101012 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
实现 fizzBuzz 函数,参数 num 与返回值的关系如下:
1、如果 num 能同时被 3 和 5 整除,返回字符串 fizzbuzz
2、如果 num 能被 3 整除,返回字符串 fizz
3、如果 num 能被 5 整除,返回字符串 buzz
4、如果参数为空或者不是 Number 类型,返回 false
5、其余情况,返回参数 num
示例1

输入

15

输出

fizzbuzz
推荐

能否整除即余数是否为0,则使用%运算符。使用if-elseif结构,只要某一条匹配,则下面的不会在进行判断。判断num是否为Number,可以用typeof运算符,返回的是字符串。

function fizzBuzz(num) {
    if(num%3 == 0 && num%5 == 0)
        return "fizzbuzz";
    else if(num%3 == 0)
        return "fizz";
    else if(num%5 == 0)
        return "buzz";
    else if(num == null || typeof num != "number")
        return false;
    else return num;
}


编辑于 2015-08-18 21:02:07 回复(37)

高程明确定义 Number类型下两种表示: var num = 120 or var num1 = new Number(120)

  • 高票第一回答下需要考虑一个问题new Number(120)也是Number类型。
  • 前者typeof num === 'number', 后者typeof num1 = 'object';
  • 最精确的判断方法向来是Object.prototype.toString.call(args) === '[object ' + type + ]';
  • 这里type可取[ 'Array', 'Number', 'Object', 'String', 'Undefined', 'null' ]

    结帖


function fizzBuzz(num) {
    if (num === undefined || Object.prototype.toString.call(num) !== '[object Number]') {
        return false;
    }
    if (num % 3 === 0 && num % 5 === 0) {
        return 'fizzbuzz';
    } else if (num % 3 === 0) {
        return 'fizz';
    } else if (num % 5 === 0) {
        return 'buzz';
    }
    return num;
}
var num = new Number(120);
console.log(fizzBuzz(num), typeof num); // fizzBuzz, object
//测试判例
console.log([fizzBuzz(''), //false
    fizzBuzz(), //false
    fizzBuzz(0), //fizzBuzz
    fizzBuzz(15), //fizzBuzz
    fizzBuzz(9), //fizz
    fizzBuzz(25), //buzz
    fizzBuzz(29) //29
]);
编辑于 2017-03-14 16:36:50 回复(8)
    function fizzBuzz(num) {
    if(num === null || typeof num !== 'number'){
            return false;
        }else{
            if(num%15==0){
                return "fizzbuzz";
            }else{
                if(num%3==0){
                    return "fizz";
                }else if(num%5==0){
                    return "buzz";
                }
                return num;
            }
        }
    }
发表于 2016-06-30 12:36:05 回复(0)
function fizzBuzz(num) {
    if(fizzBuzz.length == 0 || typeof(num) != "number"){
        return false;
    }
    if(num % 3 == 0 && num % 5 == 0){
        return "fizzbuzz";
    }
    if(num % 3 == 0){
    	return "fizz";
    }
    if(num % 5 == 0){
        return "buzz";
    }
    return num;
}

发表于 2017-03-26 11:24:09 回复(1)
 // 一般写法
function fizzBuzz(num) {
    if (num % 3 === 0 && num % 5 === 0) {
    /* 特殊地,可换为 if (num % 15 === 0) */
        return 'fizzbuzz';
    } else if (num % 3 === 0) {
        return 'fizz';
    } else if (num % 5 === 0) {
        return 'buzz';
    }

    if (num === null || num === '' || typeof num !== 'number') {
        return false;
    }

    return num;
}  
// 改进写法
function fizzBuzz(num) {
    if (num === null || num === '' || typeof num !== 'number') {
        return false;
    }
    
    var result = '';

    if (num % 3 === 0) {
        result += 'fizz';
    }
    if (num % 5 === 0) {
        result += 'buzz';
    }
    
    return result || num;
}


编辑于 2017-08-17 22:11:59 回复(4)
function fizzBuzz(num) {
    if((typeof num == "number")&&(num != " ")){
         if(num%3==0&&num%5==0){
            return "fizzbuzz";
        }else if(num%3==0){
            return "fizz";
        }else if(num%5==0){
            return "buzz";
        }else{
            return num;
        }
    }else{
        return false;
    }
}
发表于 2016-05-17 20:39:06 回复(1)
function fizzBuzz(num) {
	if(num%3==0 && num%5==0){
        return "fizzbuzz";
    }else if(num%3==0){
        return "fizz";
    }else if(num%5==0){
		return "buzz";
    }else if(isNaN(num)){
        return false;
    }else{
        return num;
    }
}

发表于 2015-07-20 21:08:55 回复(1)
        //虽然题比较简单 还是要注意逻辑顺序
        function fizzBuzz(num) {
            if ((num === null || num === '' || typeof num !== 'number')) {
                return false
            } else {
                if (num % 3 == 0 && num % 5 == 0) { return 'fizzbuzz'; }
                else if (num % 3 == 0) { return 'fizz'; }
                else if (num % 5 == 0) { return 'buzz'; }
                else { return num }
            }
        }
发表于 2022-04-20 18:48:40 回复(0)
function fizzBuzz(num) {
    if(num === null || typeof(num) !== 'number') {
        return false;
    } else if (num % 3 === 0 && num % 5 === 0) {
        return 'fizzbuzz';
    } else if (num % 3 === 0) {
        return 'fizz';
    } else if (num % 5 === 0) {
        return 'buzz';
    } else {
        return num;
    }
}

发表于 2022-03-27 20:51:12 回复(0)
function fizzBuzz(num) {
  // debugger
    var out = null
    out = Object.prototype.toString.call(num).split(' ')[1]
    out = out.substring(0,out.length-1)
    if(out !== 'Number' || out === 'null')  {
      return false
    }
    num = num%3 === 0 && num%5 === 0 ? 'fizzbuzz' : num
    num = num%3 === 0 ? 'fizz' : num
    num = num%5 === 0 ? 'buzz' : num

    return num
}
发表于 2022-02-26 15:41:14 回复(0)
function fizzBuzz(num) {
    if(!num || typeof num !== 'number') return false
    let conditionByThree = num % 3 === 0
    let conditionByFifth = num % 5 === 0
    
    if(conditionByThree && conditionByFifth) return 'fizzbuzz'
    if(conditionByThree) return 'fizz'
    if(conditionByFifth) return 'buzz'
    return num
}

发表于 2021-09-02 12:36:11 回复(0)
欢迎讨论或指正,Thanks♪(・ω・)ノ
function fizzBuzz(num) {
    let str = '';
    if(typeof num !== 'number') {
        return false;
    } else if (num === null) {
        return false;
    } else { 
        if (num % 3 == 0) {
            str += 'fizz';
        }
        if (num % 5 == 0) {
            str += 'buzz';
        }
        return str == '' ? num : str;
    }
}


发表于 2021-08-17 21:25:22 回复(2)

    function fizzBuzz(num) {
            if (!num || typeof (num) != 'number') return false
            if (!(num % 3) && !(num % 5)) {
                return 'fizzbuzz'
            }
            return !(num % 3) ? 'fizz' : !(num % 5) ? 'buzz' : num
        }

发表于 2021-08-12 14:47:24 回复(0)
function fizzBuzz(num) {
    let obj = {
        [num % 3 === 0] :'fizz',
        [num % 5 === 0] :'buzz',
        [num % 3 === 0 && num % 5 === 0] : 'fizzbuzz',
        [isNaN(num)] : false,
    }
    return obj['true'] ?? num
}

这个方法是可以的,但是官方好像不支持ES2020
发表于 2021-08-01 23:23:23 回复(0)
function fizzBuzz(num) {
    if (isNaN(num) || num == null){
        return false;
    }else if(num % 3 ==0 && num % 5 == 0){
        return 'fizzbuzz';
    }else if(num % 3 == 0){
        return 'fizz';
    }else if(num % 5 == 0){
        return 'buzz';
    }else{
        return num;
    }
}
发表于 2020-03-24 17:46:55 回复(0)
function fizzBuzz(num) {
    let str = "";
    let type = Object.prototype.toString.call(num);
    if (type !== "[object Number]"){
        return false;
    }
    if (num%3 === 0){
        str += "fizz";
    }
    if (num%5 === 0){
        str += "buzz";
    }
    return str ? str : num;
}
发表于 2020-03-10 03:37:07 回复(1)
function fizzBuzz(num) {
    if(typeof num != 'number'){
        return false;
    }else{
        return (num%3 == 0 && num%5 ==0) ? 'fizzbuzz' :(num%3 == 0 ? 'fizz' :(num%5 == 0 ? 'buzz':num));
    }
}

发表于 2019-09-10 11:50:18 回复(0)
T1M头像 T1M

function fizzBuzz(num) {
    if(!isNaN(num*1)){//这个判断是利用*1转数字类型 ,当不是数字类型的时候为NAN
            //当数字可以被3或5整除时返回fizz或buzz或fizzbuzz  否则是num
        return num%3==0||num%5==0?(num%3==0?'fizz':'')+(num%5==0?'buzz':''):num
    }else{//num不为数字类型
        return false
    }
}
发表于 2019-08-09 10:51:18 回复(0)
function fizzBuzz(num) {
     return num==null||typeof num != "number"?
         false:num%3==0&&num%5==0?
        'fizzbuzz':num%3==0?
        'fizz':num%5==0?
        'buzz':num
}
编辑于 2019-08-08 14:21:36 回复(0)
function fizzBuzz(num) {
    if((num%3 == 0)&&(num%5 == 0)){
        return "fizzbuzz";
    }else if(num%3 == 0){
        return "fizz";
    }else if(num%5 == 0){
        return "buzz";
    }else if((num==null)||(num instanceof Number)){    //注意:这里不能使用instansof,应该使用typeof。
        return false;
    }else{
        return num;
    }
}
区别:typeof是判断变量是什么基本类型的;
          instanceof是判断对象到底是什么类型的;

不能使用instanceof,是因为:instanceof一般用来检测引用类型的值,检测是什么类型的对象。而如果使用instanceof操作符检测基本类型的值,则该操作符始终会返回会false,因为基本类型不是对象。(这就是instanceof和typeof的区别)。
检测一个变量是不是基本数据类型,typeof是最佳的操作工具。

发表于 2019-08-02 18:05:14 回复(0)
function fizzBuzz(num) {
    return isNaN(num) ? false : ((num % 3 === 0 && num % 5 === 0) ? 'fizzbuzz' : ((num % 3 === 0) ? 'fizz' : ((num % 5 === 0) ? 'buzz' : num)))
}

发表于 2018-09-28 16:16:24 回复(0)