此題來自:《linux c程式設計一站式學習》
假設變數x和n是兩個正整數,我們知道x/n這個表示式的結果要取floor,例如x是17,n是4,則結果是4。如果希望結果取ceiling應該怎麼寫表示式呢?例如x是17,n是4,則結果是5;x是16,n是4,則結果是4。
網上對這道題只有答案和證明,我們雖然能證明答案的正確性卻不知道答案是如何得出的,這篇文章填補了這一空白。
設x=kn+b,b∈(0, n)且b∈z,當b=0時,
(x+z)/n=k,即(kn+z)/n=k,根據題目要求,z最大為n-1;
當b≠0時,(x+z)/n=k+1,即(kn+b+z)/n=k+1,也就是(b+z)/n=1,由於b∈(0, n)且b∈z,故b可取最小值1,此時z為n-1,當b取2時,z為n-2……當b=n-1時,z=1,可見不考慮特殊情況時,z最大為n-1;而當b=n-1時,z若為n-1,則(b+z)/n=2-2/n<2,也就是(kn+b+z)/n∈[1, n-1],∵[
所以這個表示式應該寫為:(x+n-1)/n
而且從上面的推導過程可以看出,對於x%n=n-1的情況,只要再給x加上乙個1就可以取ceiling,比如19%4=3,(19+1)/4=5。
C語言中整型運算取Ceiling問題
此題來自 linux c程式設計一站式學習 假設變數x和n是兩個正整數,我們知道x n這個表示式的結果要取floor,例如x是17,n是4,則結果是4。如果希望結果取ceiling應該怎麼寫表示式呢?例如x是17,n是4,則結果是5 x是16,n是4,則結果是4。網上對這道題只有答案和證明,我們雖然...
C語言中整型運算取Ceiling問題補充
假設變數 x 和 n 是兩個正整數,我們知道 x n 這個表示式的結果要取 floor,例如 x 是 17,n 是 4,則結果是 4。如果希望結果取ceiling 應該怎麼寫表示式呢?例如 x 是 17,n 是 4,則結果是 5 x是16,n 是 4,則結果是 4。設 x kn b,b 0,n 且 ...
C語言中基本整型資料型別
c語言中的基本整型資料型別 整型家族包括字元 短整型 整型 長整型,它們都分為有符號和無符號兩種版本 整型值相互之間的大小的規則 長整型至少應該和整型一樣長,而整型至少應該和短整型一樣長 一般情況下各種型別在32 64位機上的大小 long,unsigned long pointer為機器全字長,其...