여기 Spoj 문제 ROOTCIPH입니다. C에서 두 가지 방법으로 문제를 해결했습니다. 하나의 접근 방식은 정답과 다른 오류를 제공합니다.Spoj ROOTCIPH 틀린 대답
우리는 문제를 해결하는 방법을 논의하지 않을 것입니다. 해결책은 간단합니다. 항상 * a -2 * b입니다. (입방 방정식의 뿌리의 기간으로 생각하십시오.) 어쨌든 질문은 그것과 관련이 없습니다. 내가 제공 한 세부 정보로 소스에 대한 솔루션을 실행하고 더 많은 것을 분석 할 수 있습니다.
이제 질문 : 코드에서
아래 대신 'INT'의 경우, 내가 오래 오래, 내 대답은 그렇지가 틀렸다는 주심의 '내부'에 대한 올바른 표시됩니다 걸릴의 printf에서 %의 LLD를 촬영 한 , 따라서 정수를 초과하면 처리해야합니다.
잘못된 코드 :
int main()
{
int a,b,c;
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d",&a,&b,&c);
printf("%lld\n",1LL*a*a-2*1LL*b);
}
return 0;
}
오른쪽 코드 : (A)의 절대 값이, B, C^8 (10)를 초과하지 않을 것이라는
int main()
{
long long a,b,c;
int t;
scanf("%d",&t);
while(t--)
{
scanf("%lld%lld%lld",&a,&b,&c);
printf("%lld\n",a*a-2*b);
}
return 0;
}
참고.
첫 번째 접근 방법이 잘못된 해결책을 제공합니까? 주어진 링크에서 솔루션을 실행하고 확인하십시오.
C operator precedence table에 따르면, *
은 왼쪽에서 오른쪽으로 연결됩니다.
'long'에 맞는'int '에 맞지 않는 매우 큰 숫자가있을 수 있습니까? – Brian
1LL을 사용 했으므로 우선 순위에 따라 결과가 항상 길어야합니다. –
결과는 'long long'입니다. 중간 값 유형 (특히 a * a)에 대해서는 아무 것도 말하지 않습니다. –