**是這樣的:
新開兩個指標:
long *p1=new long;
long *p2=new long;
其中:*p1=-100000;
*p2=100000;
後面進行計算的時候,
long long res=*p1*(*p2);
得到的結果是:
res=-1410065408
顯然,這裡*p1被隱式轉換成了long,然後兩個long相乘,結果溢位了。
正確的結果是:
res=-1e10
在c++ primer第156頁講過,陣列會隱式轉換為指向第乙個元素的指標。
所以,c++將「指向new開闢的動態記憶體的」指標隱式轉換為了long型別。
但是long只有32位。這裡會溢位。
所以一種方法是先強制轉換:
res=(long long)(*p1)*(long long)(*p2);
當然更好的方法是,把long long定義為int64。
然後開闢64位的儲存空間:
int64 *p1=new int64;
int64 *p2=new int64;
int64 res=*p1*(*p2);
完畢。
計算乙個數階乘的位數
給出乙個數n,求出n!的位數。暴力法肯定是不行的,階乘是個增長速度 很快的函式,10!已經有7位了。更直接的方法是log10 n 以10為底n 的對數。因為求位數就是要每次除以10 的,取對數的意義就是10的幾次方才能到n 也就是求了n 有幾位。那麼問題就轉化成求log10 n 了 一種方法是換底公...
C 將乙個資料格式化為固定長度的字串
經常會遇到將資料解析為文字檔案的現象,通常因為資料長度的不同導致,視覺化效果不好。寫乙個輸入資料獲取固定長度字串的函式,來得到乙個固定長度的資料,讓格式化看起來好看一些。include include include templatestd string gen fixed len str t va...
map轉json格式的返回乙個陣列的格式
今天寫介面,返回的資料是一行,但是要返回的是乙個列表。我直接返回map,如果是 多條資料,會覆蓋map裡面的key值.仍然是一行。返回列表需要把map放在list裡面,然後在放在 新的map裡面,把map轉換成json格式返回。jsonarray.fromobject 只能轉換list物件 json...