|
听说是吉林大学计算机2000级补考题,此题不会不给及格!
2002年发在CSDN一直无解......
计算两正整数的积。
要求:不许使用任何运算符!
注:本题为吉林大学计算机2000级补考题,此题不会不给及格!
运算符包括:
()
[]
->
.
!
~
++
--
-(负号)
*(指针)
&
SIZEOF
*(乘法)
/
%
+
-(减法)
<<
>>
<
<=
>
>=
==
!=
&
^
|
&&
||
? :
=
+=
-+
*=
/=
%=
>>=
<<=
&=
? :
=
+=
-+
*=
/=
%=
>>=
<<=
&=
^=
|=
分析题目:位运算,连<<、>>、^......众都封了还位运算个鬼;聪明人可能想起来套汇编
int (int m , int n)
{
asm mov ax,0
asm mov cx,m /*用寄存器CX计数*/
s: /*循环计算m*n的值,算法为m个n相加*/
asm add ax,n
asm loop s
return (_AX); /*程序返回*/
}
套了汇编就简单H啦进寄存器,用循环的加法替代乘法OK
看似解决了但是“(”和“)”也是算符范围内的,所以用宏定义替代“(”
#define _41 ) /*这里两行中的)(并不是作为运算符,而是类似于标识符的东西,所以没有违返题目的意思*/
#define _40 (
int _40 int m , int n _41
{
asm mov ax,0
asm mov cx,m /*用寄存器CX计数*/
s: /*循环计算m*n的值,算法为m个n相加*/
asm add ax,n
asm loop s
return _40 _AX _41; /*程序返回*/
}
史上最别扭的代码......
但是怎么输入输出呢?
scanf()要用到取地址“&”
流对象cin和cout的<<和>>是operator,又引出了重载运算符是算运算符还是函数的问题了......
无解至今......
|
|