我是新手,如果我的問題很傻,請耐心等待。如何在c中打印出一個非常大的值
int main()
{
int x=60674;
printf("%lf \n",(double)(x*x));
printf("%lld \n",(long long)(x*x));
return 0;
}
爲什麼這不起作用?
我是新手,如果我的問題很傻,請耐心等待。如何在c中打印出一個非常大的值
int main()
{
int x=60674;
printf("%lf \n",(double)(x*x));
printf("%lld \n",(long long)(x*x));
return 0;
}
爲什麼這不起作用?
Additionaly你可以使用標準的整數:
#include <inttypes.h>
#include <stdio.h>
int main() {
int x=60674;
printf("%" PRIu64 "\n",(uint64_t)x * x);
return 0;
}
而且你不需要投兩個變量.. *會使用更大類型的兩個乘法器強制執行。
順便說一句,你可以只使用unsigned int類型..結果將適合UINT_MAX是4294967295(從here)
根據C規範,UINT_MAX至少爲_65535_ C11§5.2.4.2.11. C沒有將'UINT_MAX'指定爲'4294967295'。 – chux
感謝您的快速響應。它解決了。 –
x * x
溢出,所以你應該扔在long longs
乘法之前:
printf("%lld \n",((long long)x * (long long)x));
謝謝你的回覆。已解決 –
x
是有符號整數,可容納值只有高達-2,147,483,847
到+2,147,483,847
和執行操作
x * x
==> 60674 * 60674 = 3,681,334,276
它通常溢出整數範圍。因此,您可能需要一些大數據類型來保存該計算60674 * 60674
您可以嘗試兩件事來做到這一點。
變化從int
到long
的x
的數據類型或更多範圍long long
long long x = 60674;
類型轉換計算到遠程數據類型。 printf("%lld \n",((long long)x* (long long)x));
謝謝你解決了我的問題。 –
@maharshikintada,你最終可以點擊接受答案,如果這對你有幫助。這樣做會讓我微笑:) –
因爲'x * x'溢出。 –
1.當某些「不起作用」時更具體。解釋你的期望和你所看到的。 2.你輸出結果,但結果是一個int。演員必須在之前完成。 – Tim
你應該接受最好的答案,而不只是評論它的工作。 – SurvivalMachine