LoginSignup
2
3

More than 5 years have passed since last update.

C++,Java腕試し。

Last updated at Posted at 2013-04-20

WordPressの記事移植。
コードの書き方がチョイ違うけど、基本的なMarkdownは一緒なので、
いい感じ。

問題


以下の制約を守り、Nの階乗(N!)を返すint computeFactorialN(N)メソッドを実装してください。

制約:if, switch, for, while,比較演算子は利用不可













正解


たしかにJavaは思いつかない。Boolean型の仕様が厳しい。

ちなみにcomputeFactorialN(0) = 0になるのと、

すぐintがオーバーフローするのはドンマイ。

Answer.cpp
#include <iostream>

static int computeFactorialNotOne(int n);

static bool notEqualOne(int n){
    return (bool)(n >> 1);
}

static int computeFactorialOne(int n){
    return 1;
}

static int (*factorials[2])(int) = {computeFactorialOne, computeFactorialNotOne};

static int computeFactorialNotOne(int n){
    return n * factorials[notEqualOne(n)](n - 1);
}


static int computeFactorialN(int n){
    return computeFactorialNotOne(n);
}

int main(){

    for(int i = 1; i < 10; i++){
        std::cout << "computeFactorialN(" << i 
            << ") = " <<  computeFactorialN((int)i) << std::endl;
    }
    return 0;
}

0!=1の実装はあと2つくらいメソッドを追加すればおっけー。

Javaは0の判断を以下のように行い、メソッドを切り替えればできると別の先輩が教えてくれた

JavaAnswer.java
( (n * -1) >>> (Integer.size() - 1) ) 

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3