c基礎 關於進製和巨集的問題

2021-08-17 03:35:29 字數 1130 閱讀 6033

1、類推進制的構成

推理1:

10進製:112*221=24752

可寫為:(1*10^2+1*10^1+2*10^0)*(2*10^2+2*10^1+1*10^0)=2*10^4+4*10^3+7*10^2+5*10^1+2*10^0

類推n進製:abc*bca=(a*n^2+b*n^1+c*n^0)*(b*n^2+c*n^1+a*n^0)

推理2:

從上面的10進製中我們可以得到:等式兩邊同時對10求餘——每個乘數的個位數之積,對10求餘,餘數就是這兩個乘數之積的個位數  ((2*1)%10=2)。

那麼同理:在n進製中,等式兩邊同時對n求餘——每個乘數的個位數之積,對n求餘,餘數就是這兩個乘數之積的個位數。

2、例項:

a、如果在某系統中,等式15*4=112成立,則系統採用的是(a)進製。

a、6           b、7            c、8              d、9

解:利用推理2,可得(4*5)%n=2;則n=6或n=9;

使用推理1,可得(1*6^1+5)*4 = 44, 1*6^2+1*6^1+2 = 44;

(1*9^1+5)*4=56, 1*9^2+1*9^1+2=92;

b、如果在某系統中,等式567*456=150216成立,則系統採用的是(d)進製。

a、9         b、10            c、12             d、18

解:使用推理2可得(7*6)%n=6;則n=9或n=12或n=18;

使用推理1可得(5*n^2+6*n+7)*(4*n^2+5*n+6)=n^5+5*n^4+2*n^2+n+6

此時如果我們再將選項帶進去乙個乙個試的話,將非常的麻煩,不僅耗時難算,還容易出錯。

那麼像遇到像這種高進製的數時,先化簡,然後等式兩邊同除n,最後再求餘。

化簡得:20*n^4+49*n^3+88*n^2+71*n+42=n^5+5*n^4+2*n^2+n+6;

兩邊同時除以n再對n求餘化簡得:(71+36/n)%n=1;

解得n=18.

1、巨集就是字元替換。

例項a#define pow(x) (x)*(x)

#define double(x) (x)+(x)

int main()

C 的巨集和 C 的巨集

總結一下c和c 的巨集。大家經常使用的其實都是c中的巨集,但是c 都延續了下來,先回顧一下。define 定義巨集 undef 取消巨集 include 包含標頭檔案 ifdef 如果巨集已經定義,則返回真 ifndef 如果巨集沒有定義,則返回真 if 如果條件為真,則執行下面的 else 與 i...

關於進製的問題

關於進製的問題 eg 如果某系統15 4 112成立,則系統採用的是幾進製?a.6 b.7 c.8 d.9 解題思路 先看個位數字的乘積 5 4 20 根據選項試出20對哪個數取余為2,排除bc選項,展開等號兩邊 n 5 4 n 2 n 2 解得n 3 舍 n 6 因此答案選a eg 假設在n進製下...

關於C語言巨集定義的技巧 和

和 是兩個預處理運算子,只能在預處理的過程中使用。在帶引數的巨集定義中,帶引數的巨集定義也是可以使用可變引數的 define showlist printf va args 其中.表示使用可變引數,va args 在於處理中被實際的引數集所替換。include define str s s str ...