類型轉化的問題

int 2147483648~2147483647

long long的最大值:9223372036854775807
long long的最小值:-9223372036854775808

由於在編程過程中常常出現int範圍過小的問題,但是double的精度問題有很麻煩,所以常用long long ,但是重點是我們真的用對了嗎,還是被表面現象欺騙了。

#include<iostream>
#include<cmath>

using namespace std;
int main(){
int x;
while(cin >> x){
	long long y = x*x*(x*x+x*x);
	cout << y <<endl;
	}
return 0;
}


看似這個代碼實現了int 到long long 的轉化,但是實驗發現x的值大概只能輸到180,因爲我被欺騙了,但是

#include<iostream>
#include<cmath>

using namespace std;
int main(){
int x;
while(cin >> x){
	long long y = (long long)x*x*(x*x+x*x);
	cout << y <<endl;
	}
return 0;
}

這個代碼就可以輸入x的值達到十萬左右,兩個代碼的區別在於long long y = (long long)x*x*(x*x+x*x); 沒加long long 的時候根本沒有實現類型轉化,原因是什麼???我不知道!!!但是在編寫很長的代碼的時候,這個問題就會被遺忘,但是往往就是致命點。WRONG ANSWER 20多次是正常滴,還不一定能發現問題。

 

經過痛苦的調試uva 109之後,我得到了很大的教訓。以後千萬不可忘記。老師的課是有道理的,不然我怎麼也不會知道是這個原因了。

發佈了55 篇原創文章 · 獲贊 8 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章