unsigned long long a,b,c;
cin>>a>>b>>c;
cout<<(a*b*c);
入力: 512 294967268 279632277 出力: 5337484673731225600
ただし、512 * 294967268 * 279632277
Python で実行すると、次のような出力が得られます。
42230972821150328832L
別の答えが得られるのはなぜですか?
unsigned long long a,b,c;
cin>>a>>b>>c;
cout<<(a*b*c);
入力: 512 294967268 279632277 出力: 5337484673731225600
ただし、512 * 294967268 * 279632277
Python で実行すると、次のような出力が得られます。
42230972821150328832L
別の答えが得られるのはなぜですか?
確かにC++でオーバーフローします。
Python には、結果を格納するための任意のサイズのデータ型があります。したがって、格納する値が大きい場合、 データ型のサイズも自動的に大きくなります。
>> x = 512 * 294967268 * 279632277
>> x
42230972821150328832L
>> type(x)
<type 'long'>
>> x.__sizeof__()
36
>> x = x * x
>> x
1783455065420737763677831948901730484224L
>> type(x)
<type 'long'>
>> x.__sizeof__()
44
したがって、実際にはデータ型のサイズに制限はありません。利用可能なメモリは、理論上の制限を定義します。