bch8623   5년 전

unsigned long long int a,b,res=0;

scanf("%d %d",&a,&b);

res=(a*b)%1000000007;


이렇게 입력받아 res 값을 출력할려는데요.

a와 b가 3억씩만 되어도 res 값이 이상하게 나온다는 건 a*b가 오버플로우가 일어났다는 건데

배열로 집어넣어 곱하는 거 외에 다른 방법이 있나요?

djm03178   5년 전

unsigned long long은 %llu 로 입력받고 출력해야 합니다.

bch8623   5년 전

%llu 로 바꿨습니다.


하지만 (30억 * 30억) % 1억 7 의 값이 제대로 나오지 않습니다. 곱할때, 오버플로우가 일어나는 것 같습니다. 해결방법이 있나요?

cubelover_dev   5년 전

자료형마다 담을 수 있는 수의 범위가 있습니다. unsigned long long은 2^64(=약 1800경) 미만의 정수를 담을 수 있는 자료형으로, 30억 * 30억은 900경이므로 계산할 수 있어야 합니다.

곱하는 두 수가 더 커졌을 때가 궁금하신 것 같은데, https://www.acmicpc.net/proble... 이 문제를 풀어 보시면서 직접 답을 찾으시면 좋을 것 같네요.

댓글을 작성하려면 로그인해야 합니다.