研究生复试的时候老师出的一道算法题,我觉得比较有意思,就来晒晒,看看高人见解。“只用赋值、加1、循环三个操
研究生复试的时候老师出的一道算法题,我觉得比较有意思,就来晒晒,看看高人见解。
“只用赋值、加1、循环三个操作实现一个减1的运算。”
上面是原话,老师就给那么多信息,没有别的话了。
高人们有代码的可以贴代码,随便你用什么语言,没代码的说说清楚思路也行。顺便帮忙看看哪些答案有错误啊。
[解决办法]
- C/C++ code
template <typename T>T MOne(T a){ T i = 0; for (i; (i + 1) != a; i++) { } return i;}
[解决办法]
抛砖引玉 给个只对奇数有效的
- C/C++ code
union U{ int a; int b:1;}u;int f(int a){ u.a = a; u.b++; return u.a;}int _tmain(int argc, _TCHAR* argv[]){ printf("%d\n", f(9)); return 0;}
[解决办法]
[解决办法]
这题目不是C语言题目,也不是考算法,而是考你计算机整数处理的基本概念
先要看整数是多长的,假设是16位的,那么循环65535次的加一,就是减一
对于n比特宽的整数,循环2^n - 1次加一,就是减一。
