1時間ごとに更新!Amazon.co.jpで今売れている本トップ100   掲示板ランキング



掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板1

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧

No.5912

階乗を計算するプログラム
投稿者---たつや(2006/06/21 21:29:35)


はじめまして!
どうしても分からない問題があるんですがどなたか分かる方いらっしゃらないでしょうか??
問題
整数-5〜15について階乗を計算して表示させなさい。
整数nを引数とし、以下のようにnの階乗(n! = 1 x 2 x … x n)
を計算してfactを作成せよ。

factは
nが0のとき1を返す
nがい以上のときn!を返す
nが負の値のとき-999を返す

よろしければお力をお貸しください(o_ _)o))


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:階乗を計算するプログラム 5913 KING・王 2006/06/21 21:56:44
<子記事> Re:階乗を計算するプログラム 5920 def 2006/06/22 20:11:12


No.5913

Re:階乗を計算するプログラム
投稿者---KING・王(2006/06/21 21:56:44)


>問題
>整数-5〜15について階乗を計算して表示させなさい。
>整数nを引数とし、以下のようにnの階乗(n! = 1 x 2 x … x n)
>を計算してfactを作成せよ。
>
>factは
>nが0のとき1を返す
>nがい以上のときn!を返す
>nが負の値のとき-999を返す

とりあえず条件は満たしているはず。

long fact( int n )
{
    switch( n ){
    case -5:
    case -4:
    case -3:
    case -2:
    case -1:
        retrun -999;
        break;
    case 0:
        return 1;
        break;
    case 1:
        return 1;
        break;
    case 2:
        return (1*2);
        break;
    case 3:
        return (1*2*3);
        break;
    case 4:
        return (1*2*3*4);
        break;
    case 5:
        return (1*2*3*4*5);
        break;
    case 6:
        return (1*2*3*4*5*6);
        break;
    case 7:
        return (1*2*3*4*5*6*7);
        break;
    case 8:
        return (1*2*3*4*5*6*7*8);
        break;
    case 9:
        return (1*2*3*4*5*6*7*8*9);
        break;
    case 10:
        return (1*2*3*4*5*6*7*8*9*10);
        break;
    case 11:
        return (1*2*3*4*5*6*7*8*9*10*11);
        break;
    case 12:
        return (1*2*3*4*5*6*7*8*9*10*11*12);
        break;
    case 13:
        return (1*2*3*4*5*6*7*8*9*10*11*12*13);
        break;
    case 14:
        return (1*2*3*4*5*6*7*8*9*10*11*12*13*14);
        break;
    case 15:
        return (1*2*3*4*5*6*7*8*9*10*11*12*13*14*15);
        break;
    default:
        return -1;
        break;
    }
}




この投稿にコメントする

削除パスワード

No.5914

Re:階乗を計算するプログラム
投稿者---かずま(2006/06/22 03:36:00)


> とりあえず条件は満たしているはず。

満たしていません。


この投稿にコメントする

削除パスワード

No.5921

Re:階乗を計算するプログラム
投稿者---KING・王(2006/06/22 23:38:22)


>> とりあえず条件は満たしているはず。
>
>満たしていません。

すいません。よく確認していませんでした。
戻り値がlongではまずいですね。。。orz
浮動小数点なり、longlong等の64Bitの整数型にしなければなりません。


この投稿にコメントする

削除パスワード

No.5932

Re:階乗を計算するプログラム
投稿者---たつや(2006/06/24 14:09:12)


>>> とりあえず条件は満たしているはず。
>>
>>満たしていません。
>
>すいません。よく確認していませんでした。
>戻り値がlongではまずいですね。。。orz
>浮動小数点なり、longlong等の64Bitの整数型にしなければなりません。




つまりどうすればいいと言うことでしょうか??



この投稿にコメントする

削除パスワード

No.5933

Re:階乗を計算するプログラム
投稿者---円零(2006/06/24 14:38:19)


階乗の答えが入る変数をlong long int型で宣言すればOK。
printfの型の指定は %lld 。

ただし、C99(1999年に制定された規格。言わばC標準規格第二版)
に対応した環境でないとダメ。
質問するときはちゃんと環境書いてください。答えにくいから。


この投稿にコメントする

削除パスワード

No.5934

Re:階乗を計算するプログラム
投稿者---たつや(2006/06/24 15:47:48)


>階乗の答えが入る変数をlong long int型で宣言すればOK。
>printfの型の指定は %lld 。
>
>ただし、C99(1999年に制定された規格。言わばC標準規格第二版)
>に対応した環境でないとダメ。
>質問するときはちゃんと環境書いてください。答えにくいから。



わざわざありがとうございました。



この投稿にコメントする

削除パスワード

No.5920

Re:階乗を計算するプログラム
投稿者---def(2006/06/22 20:11:12)


プログラムの設計は基本的にどのような場合でも動くように設計すべきです。
-1以下なら処理せずreturn -999を返すだけ。
0ならば、これも同じく処理せずにreturn 1で良いでしょう。
もしそうでない場合は、コンピュータの処理系が許す限り(値が狂わない範囲)の入力を保証すべきです。
メモリの動的確保を利用してこんなプログラムを書いてみました。

#include <iostream>
using namespace std;

double fact(double target)
{
    double retval=0;
    if(target<0)
    {
        return -999;
    }
    else if(target == 0)
    {
        return 1;
    }
    
    double* pcv = new double[(size_t)target];
    for(int i=0;i<target;i++)
    {
        pcv[i]=i+1;
    }
    for(int i=0;i<target;i++)
    {
        pcv[0]*=pcv[i];
    }
    retval = pcv[0];
    delete [] pcv;
    return retval;
}

int main()
{
    cout<<fact(-1)<<endl; //入力の実装は避けました
    return 0;
}



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧





掲示板提供:(有)リアル・インテグリティ