2016-07-01 13 views
0

Ich bin Neuling, bitte ertragen, wenn meine Frage albern ist.So drucken Sie einen sehr großen Wert in c

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

Warum funktioniert das nicht?

+5

Weil 'x * x' überläuft. –

+4

1. Seien Sie spezifischer, wenn etwas "nicht funktioniert". Erkläre, was du erwartet hast und was du gesehen hast. 2. Sie werfen das Ergebnis, aber das Ergebnis ist ein int. Die Besetzung muss vorher gemacht werden. – Tim

+0

Sie sollten die beste Antwort akzeptieren, nicht nur kommentieren, dass es funktioniert hat. – SurvivalMachine

Antwort

1

Additionaly können Sie standardisierte ints verwenden:

#include <inttypes.h> 
#include <stdio.h> 

int main() { 
     int x=60674; 
     printf("%" PRIu64 "\n",(uint64_t)x * x); 
     return 0; 
} 

Darüber hinaus müssen Sie nicht beide Variablen werfen .. Das * wird unter Verwendung des größeren Typs der zwei Multiplikatoren auferlegt.

Btw konnte man nur unsigned int verwenden .. das Ergebnis in UINT_MAX passen würde, welche 4294967295 ist (von here)

+0

'UINT_MAX' ist mindestens _65535_ nach der C-Spezifikation C11 §5.2.4.2.1 1. C spezifiziert" UINT_MAX "nicht als' 4294967295'. – chux

+0

Danke für Ihre schnelle Antwort. Es ist gelöst. –

5

x * x überläuft, so sollten Sie sie in long longs vor der Multiplikation Stimmen:

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

Vielen Dank für Ihre Antwort. Gelöst –

0

x eine signierte ganze Zahl ist, die Wert, kann nur bis zu -2,147,483,847-+2,147,483,847 und auf der Durchführung der Operation

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

, die in der Regel den Ganzzahlbereich überläuft. Daher benötigen Sie möglicherweise einen großen Datentyp, um die Berechnung zu speichern. 60674 * 60674

Sie können zwei Dinge versuchen, dies zu tun.

  1. Ändern Sie den Datentyp x von int zu long oder für mehr Reichweite long long

    long long x = 60674;

  2. Typ werfen die Berechnung Langstreckendatentyp. printf("%lld \n",((long long)x* (long long)x));

+0

Danke, dass du mein Problem gelöst hast. –

+0

@maharshikintada, können Sie schließlich auf Antwort akzeptieren klicken, wenn dies Ihnen geholfen hat. Doing this wird mich zum Lächeln bringen :) –