-1

ここで、私が解決しようとしている問題を見つけることができます:

整数 n および k (0<=k<=n<1001) に対して (二項係数) を決定します。

入力

標準入力の最初の行には、テスト ケースの数である 1 つの整数 t (t<1001) が含まれます。

次の t 行のそれぞれに、数字 n と k があります。

出力

各テスト プリント (二項係数)。

例:

Input
3
0 0
7 3
1000 2
Output:
1
35
499500

私は自分のソリューションで何か問題を見つけることができないようです (それが非常に貧弱に書かれていることを除いて - 私はごく最近プログラミングを始めました):

#include <stdio.h>

int main()
{
    unsigned long int t,n,k,binomial=1;
    unsigned long int number=1;

    for(scanf("%lu",&t);t>0;t--)
    {
        scanf("%lu%lu",&n,&k);
        if(k<(n/2)) k=n-k;
        for(binomial=1,number=1;n>k;k++)
        {
            binomial=binomial*(k+1)/number;
            number++;
        }
        printf("%lu\n",binomial);
    }

    return 0;
}

例の入力では問題なく動作しますが、解決策は問題サイトを介して判断されます

(http://www.spoj.pl/SHORTEN/problems/BINOMIAL/english/)

そして解決策は受け入れられません。他の入力も試してみましたが、すべて正しい出力が返されました。私の質問は次のとおりです。このソリューションが無効である理由はありますか?

4

1 に答える 1

1

1000C500 は約 300 桁なので、unsigned long には格納できません。要するに、最初からやり直して、より良いテクニックを考える必要があります。

于 2012-12-02T17:24:14.280 に答える