2016-07-01 40 views
0

我是新手,如果我的問題很傻,請耐心等待。如何在c中打印出一個非常大的值

int main() 
{ 
    int x=60674; 
    printf("%lf \n",(double)(x*x)); 
    printf("%lld \n",(long long)(x*x)); 
    return 0; 
} 

爲什麼這不起作用?

+5

因爲'x * x'溢出。 –

+4

1.當某些「不起作用」時更具體。解釋你的期望和你所看到的。 2.你輸出結果,但結果是一個int。演員必須在之前完成。 – Tim

+0

你應該接受最好的答案,而不只是評論它的工作。 – SurvivalMachine

回答

1

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

+0

根據C規範,UINT_MAX至少爲_65535_ C11§5.2.4.2.11. C沒有將'UINT_MAX'指定爲'4294967295'。 – chux

+0

感謝您的快速響應。它解決了。 –

5

x * x溢出,所以你應該扔在long longs乘法之前:

printf("%lld \n",((long long)x * (long long)x)); 
+0

謝謝你的回覆。已解決 –

0

x是有符號整數,可容納值只有高達-2,147,483,847+2,147,483,847和執行操作

x * x 
==> 60674 * 60674 = 3,681,334,276 

它通常溢出整數範圍。因此,您可能需要一些大數據類型來保存該計算60674 * 60674

您可以嘗試兩件事來做到這一點。

  1. 變化從intlongx的數據類型或更多範圍long long

    long long x = 60674;

  2. 類型轉換計算到遠程數據類型。 printf("%lld \n",((long long)x* (long long)x));

+0

謝謝你解決了我的問題。 –

+0

@maharshikintada,你最終可以點擊接受答案,如果這對你有幫助。這樣做會讓我微笑:) –