在寫**的時候,尤其是數字計算的時候,我們會經常碰到計算邊界的問題,也就是說溢位的問題,比如說:最小的負數-1會出現什麼情況?最大的正整數+1會出現什麼情況?
先看看下面的**
package com.test;
public class test
public void printresult(string tag, operator op)
public operator getmaxinstance()
public operator getmininstance()
inte***ce operator
class maxvalue implements operator
@override
public int add(int a)
@override
public int minues(int a)
} class minimalvalue implements operator
@override
public int minues(int b)
@override
public int getvalue()
}}
執行上面的**結果是:
maxvalue: 2147483647
maxvalue+1: -2147483648
maxvalue-1: 2147483646
minivalue: -2147483648
minivalue+1: -2147483647
minivalue-1: 2147483647
對於上述操作,總結如下
下面用二進位制來解釋
最小值為 0x10000000====>10000000 00000000 00000000 00000000
最大值為0x7fffffff*****>01111111 11111111 11111111 11111111
最小值-1=01111111 11111111 11111111 11111111*****=》轉化為十進位制要按照two's complement的操作來弄,就過就是上面那樣
最大值+1=10000000 00000000 00000000 00000000*****=》轉化為十進位制要按照two's complement的操作來弄,就過就是上面那樣
接下來會討論float和double以及如何判斷溢位。
最大值 最小值
求最大最小的時候有點小技巧,就是我們兩個兩個的比較,把大個跟當前最大比較,小的跟當前最小的比較,這樣就會節約一點比較時間,有原來的2 n到3 n 2。include include 得到最大最小值 int getmaxmin int ndata,int nlen,int pnmax,int pnmi...
NYOJ 最大值和最小值
最大值和最小值 時間限制 1000 ms 記憶體限制 65535 kb 難度 1 描述 小明在上c語言課時老師布置了一道程式設計作業,要求是給你乙個數 數的長度小於100 讓你求出由該數的數字組成的最大值和最小值,由於小明程式設計學的不好但為了完成作業,想請你幫助他。輸入第一行輸入乙個數n 0輸出 ...
交換最小值和最大值
本題要求編寫程式,先將輸入的一系列整數中的最小值與第乙個數交換,然後將最大值與最後乙個數交換,最後輸出交換後的序列。注意 題目保證最大和最小值都是唯一的。輸入格式 輸入在第一行中給出乙個正整數n 10 第二行給出n個整數,數字間以空格分隔。輸出格式 在一行中順序輸出交換後的序列,每個整數後跟乙個空格...