数字の 1 と 2 を使用して、数字を構成する方法の数を計算しようとしています。これは、フィボナッチ数列F(1)=1
を使用しF(2)=2
て見つけることができます。
F(n)=F(n-1)+F(n-2)
F(n) は非常に大きくなる可能性があるため、必要なだけですF(n)%1000000007
。プロセスを高速化するために、フィボナッチ指数を使用しています。同じ問題に対して 2 つのコードを書きました (どちらもほとんど同じです)。どちらが正しいかわかりませんか?
CODE 1
CODE 2
a
先に1が正解という感じはありますが、と の掛け算b
で の値a
が既に の上限を超えていてa
を掛けたらどうなるかわかりませんb
。それが正しいとどれほど確信できるでしょうかa*b
。私の知る限り、a
値がデータ型の制限を超えている場合、値は以下の例のように最小値から再開されます。
#include<iostream>
#include<limits.h>
using namespace std;
int main()
{
cout<<UINT_MAX<<endl;
cout<<UINT_MAX+2;
}
Output
4294967295
1