C語言中整型運算取Ceiling問題

2021-06-18 13:53:52 字數 627 閱讀 4564

**

此題來自:《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所以這個表示式應該寫為:(x+n-1)/n

網上搜尋

到結果為

如下:1、

if((x%n)>0)

else

2、(x+n-1)/n);

3、(int)(((float)x/(float)n)+0.9))

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為機器全字長,其...