2016-03-28 22 views
2

Yaklaşık 9-10 basamak uzunluğa sahip büyük bir sayı hesaplamam gerekiyor.
-9.223.372.036.854.775.808Çöp değeri uzun uzun veri türü

9.223.372.036.854.775.807 için Ama bu kodu çalıştırdığınızda i basılmış bir çöp değeri elde:

#include <stdio.h> 
int main(){ 
    int seed = 88888; //This will be always a 5 digit number so the square of 
         // it will be 9 or 10 digits length 
    long long square = seed * seed; 
    printf("square = %lld", square); 
    getchar(); 
    return 0; 
} 

Çıktı: kare = -688858048

Msdn uzun uzun tip için bir dizi olduğunu söylüyor
+0

olurdu baskı Sonra uzun long' 'ziyade size_t kullanmak (tohum her zaman pozitif ise) basit bir düzeltme olacaktır: printf ("kare =% lu \ n", (imzasız uzun) kare); – user3629249

cevap

5

seed, int tipindedir. seed*seed da int tipinde olacaktır. Ve 88888*88888, int boyutunun üzerine taşar. Daha sonra bu çöp değerini long long numarasına atayabilirsiniz.

Değişim seed tipi veya sizin dökme hesaplama:

long long square = ((long long) seed) * seed; 
+0

Oh tanrım, ne aptal bir hata. Çok teşekkür ederim! Bunu 8 dakika geçmeden –

+1

@ TolgaŞen kadar doğru olarak işaretleyeceğim. Yeterince büyük değerler kullanırsanız çok uzun süre taşabileceğinizi unutmayın. Doğru çözüm, gerçek hesaplamadan önce, seçilen tür için çarpmanın mümkün olup olmadığını kontrol etmektir. – 2501