关于进制的计算问题
题目:
假设在n进制下,下面的等式成立,567*456=150216,n的值是(D)
A. 9
B. 10
C. 12
D. 18
首先
(5n^2+6n+7)(4n^2+5n+6)
=20n^4+24n^3+28n^2+25n^3+30n^2+35n+30n+30n^2+36n+42
=20n^4+49n^3+88n^2+71n+42=n^5+5n^4+2n^2+n+6 (1)
两边同时对n取余
42%n=(6%n)=6 (2) 可以排除掉B
两边同时除以n再对n取余
(71+42/n)%n=(1+6%n)%n=1 (3)
宏定义计算
#define M(x,y,z) x*y+z
Void main()
{
int a=1,b=2,c=3;
printf(“%d\n”,M(a+b,b+c,c+a);
a+b*b+c+c+a
}
本来:(1+2)*(2+3)+(3+1)=19 此算法错误
正确算法 1+2*2+3+3+1=12
由于此算法中没有括号的限制,如果(x)*(y)+(z),则是按照原来的算法计算,因为没有括号,则应该按照的优先级顺序计算
关于基本知识
位操作运算符有6个
~:按位取反
&:按位与 相同位都为1才为1
|:按位或 相同位有1就为1
^:按位异或 相同位不一样为1
<<:按位左移 按位左移,右边统一补0 左移后数字会变大2^n
>>:按位右移 按位右,左统一补0 右移后数字会变小2^n
前置++与后置++
前置++:先++再赋值 先对后面的数字进行++运算,再对前面的数字进行赋值
后置++:先赋值再++ 先将后面数字的值赋给前面的数字,再进行++运算
a=0; b=++a b=1,a=1
a=0; b=a++ b=0,a=1
关于while和do while结构
While结构保证循环执行0次及以上
Do while结构保证循环执行一次及以上
Break不能单独使用再if语句中
Switch中不允许的类型为浮点型和字符串
Switch注意的点:
Case的标签必须唯一 case b:error 有可能出现标签一致,因为b是一个变量,不唯一
Switch考点:从哪里进,从哪里出
1. 表达式的值和标签值相同时
2. 遇到break或switch结束的时候
Case标签可以随意放,不一定非要按顺序来
题目:
假设在n进制下,下面的等式成立,567*456=150216,n的值是(D)
A. 9
B. 10
C. 12
D. 18
首先
(5n^2+6n+7)(4n^2+5n+6)
=20n^4+24n^3+28n^2+25n^3+30n^2+35n+30n+30n^2+36n+42
=20n^4+49n^3+88n^2+71n+42=n^5+5n^4+2n^2+n+6 (1)
两边同时对n取余
42%n=(6%n)=6 (2) 可以排除掉B
两边同时除以n再对n取余
(71+42/n)%n=(1+6%n)%n=1 (3)
宏定义计算
#define M(x,y,z) x*y+z
Void main()
{
int a=1,b=2,c=3;
printf(“%d\n”,M(a+b,b+c,c+a);
a+b*b+c+c+a
}
本来:(1+2)*(2+3)+(3+1)=19 此算法错误
正确算法 1+2*2+3+3+1=12
由于此算法中没有括号的限制,如果(x)*(y)+(z),则是按照原来的算法计算,因为没有括号,则应该按照的优先级顺序计算
关于基本知识
位操作运算符有6个
~:按位取反
&:按位与 相同位都为1才为1
|:按位或 相同位有1就为1
^:按位异或 相同位不一样为1
<<:按位左移 按位左移,右边统一补0 左移后数字会变大2^n
>>:按位右移 按位右,左统一补0 右移后数字会变小2^n
前置++与后置++
前置++:先++再赋值 先对后面的数字进行++运算,再对前面的数字进行赋值
后置++:先赋值再++ 先将后面数字的值赋给前面的数字,再进行++运算
a=0; b=++a b=1,a=1
a=0; b=a++ b=0,a=1
关于while和do while结构
While结构保证循环执行0次及以上
Do while结构保证循环执行一次及以上
Break不能单独使用再if语句中
Switch中不允许的类型为浮点型和字符串
Switch注意的点:
Case的标签必须唯一 case b:error 有可能出现标签一致,因为b是一个变量,不唯一
Switch考点:从哪里进,从哪里出
1. 表达式的值和标签值相同时
2. 遇到break或switch结束的时候
Case标签可以随意放,不一定非要按顺序来