抓了乙個資料格式表示位數不夠的bug,警示

2021-07-06 05:51:53 字數 626 閱讀 5030

**是這樣的:

新開兩個指標:

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...