C#中如何使1和2相加但不使用加减乘除符号?求详细过程!看你怎么想!
--------------------编程问答----------------------------------------编程问答-------------------- 1|2
1 ^ 2
或者
int[] nums = { 1, 2 };
Console.WriteLine(nums.Sum()); --------------------编程问答--------------------
--------------------编程问答--------------------
1 | 2
不过Sum()也是用+来实现的 --------------------编程问答--------------------
难道用位移??? --------------------编程问答--------------------
int i=1|2+1&2;
这样做应该可以的 --------------------编程问答--------------------
放sql中。。用聚合函数行不? --------------------编程问答--------------------
--------------------编程问答--------------------
int i = 1;
int j = 2;
int k = i | j;
我确定用位移应该可以。。
比如说:题目是:4,4相加。。。
int a = 4;
int b = 4;
int result = a << 1;
--------------------编程问答--------------------
如果1和2是变量,换成其他值就不行了。只是个巧合 --------------------编程问答--------------------
不能出现加减乘除符号。 --------------------编程问答--------------------
左位移相当于乘法
左位移1:相当于乘2;
左位移2:相当于乘4;
左位移3:相当于乘8。
右位移相当于除法
右位移1:相当于除2;
右位移2:相当于除4;
右位移3:相当于除8。 --------------------编程问答--------------------
这个里面的sum功能是.net 3.0版本以上才有? --------------------编程问答--------------------
是的 --------------------编程问答-------------------- 怎么今天都是这无聊问题?
http://topic.csdn.net/u/20110613/20/64200bfb-22d0-4bda-a0ac-571ee50aa6eb.html --------------------编程问答-------------------- 再给个办法:
using System;--------------------编程问答--------------------
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Add(1, 2));
}
static int Add(int a, int b)
{
return Enumerable.Range(Enumerable.Range(a, b).Max(), 2).Max();
}
}
}
难道他们两一家公司面试去了?哈哈。。
--------------------编程问答--------------------
这种公司的企业文化很不健康,有打击员工,压榨工资的嫌疑。 --------------------编程问答--------------------
他现在就在我旁边 --------------------编程问答--------------------
你说对了。我们面试的同几家公司。 --------------------编程问答--------------------
确实是,盲目追求一些花哨的小技巧其实没有太多实际意义,反而有打击编程人员的意思。 --------------------编程问答--------------------
另外,用逻辑 and 和 xor 也可以实现。
参考数字电路里面全加器、半加器的实现。 --------------------编程问答--------------------
恩。。我第一个想到的方法就是位移。。
但是这东西真的很少用。。。
这题目意义不大。。
估计最大的目地就是要让应试人写不出来。。
好降点工资。。 --------------------编程问答-------------------- 不过这个破公司搞硬件的?现在搞硬件都用 VHDL,软件化了。真看不出这种题目有什么用。 --------------------编程问答--------------------
不用位移。 --------------------编程问答--------------------
感觉位移在这上面用不着哦,位移是倍数关系,如果换成另外一个兄弟那个题(任意2个整型,而非特指1+2)的话,就更不行了。 --------------------编程问答--------------------
可能是。。。但是位移肯定能出来。。。只是操作次数的问题。。。
但是面试题。。我想不会太难。。 --------------------编程问答-------------------- 有意思啊…… --------------------编程问答--------------------
两个整型就一定能出来 --------------------编程问答--------------------
学习了。。。这种题真是思路多。。。呵呵。。 --------------------编程问答--------------------
高手,谢谢了。兄弟 --------------------编程问答--------------------
一会儿给你个真正在 CPU 级别上不使用加法的方法。 --------------------编程问答-------------------- --------------------编程问答-------------------- 8位全加器,32位修改一下
public int add( int a, int b)
{
int[] bit = { 1, 2, 4, 8, 16, 32, 64, 128 };
int result = 0;
int cs =0;
for(int i=0;i<8;i++)
{
result |=(a&bit[i])^(b&bit[i]);
cs = (a&bit[i])&(b&bit[i]);
result |= result^(cs<<1);
}
return result;
} --------------------编程问答--------------------
顶。看上样的比某些胡扯的好。 --------------------编程问答-------------------- 主要还是两类
1 用某些API实现
2 用某种运算实现
想起个线程安全中碰到的原子操作
--------------------编程问答-------------------- 改一下这个Increment应该要传递引用进去的
void add(int i1,int i2, ref int output)
{
output = i1;
for (int i = 0; i < i2; System.Threading.Interlocked.Increment(i))
System.Threading.Interlocked.Increment(output);
}
//调用
int output = 0;
add(1,2, output);
//now output=3
Increment(ref i) --------------------编程问答-------------------- --------------------编程问答-------------------- 这是一位全加器的真值表。
a 0, b 0, carry 0, sum 0 new_carry 0
a 0, b 0, carry 1, sum 1 new_carry 0
a 0, b 1, carry 0, sum 1 new_carry 0
a 0, b 1, carry 1, sum 0 new_carry 1
a 1, b 0, carry 0, sum 1 new_carry 0
a 1, b 0, carry 1, sum 0 new_carry 1
a 1, b 1, carry 0, sum 0 new_carry 1
a 1, b 1, carry 1, sum 1 new_carry 1 --------------------编程问答--------------------
这个精炼,顶一下 --------------------编程问答-------------------- dingqi.... --------------------编程问答--------------------
仅目测就看到4,5个加号 --------------------编程问答--------------------
static int Add(int a, int b)--------------------编程问答-------------------- --------------------编程问答-------------------- 如果可以用++符号的话
{
int r, and, xor;
and = a & b;
xor = a ^ b;
while (and != 0)
{
a = and << 1;
b = xor;
and = a & b;
xor = a ^ b;
}
r = a | b;
return r;
}
for(int i =0,i<b,i++)
a++;
不是更简单 --------------------编程问答-------------------- --------------------编程问答-------------------- ++不能算。 --------------------编程问答--------------------
这个其实不是主要问题。因为++只是简单的循环变量。 --------------------编程问答-------------------- --------------------编程问答--------------------
--------------------编程问答-------------------- C语言观光团代表前来慰问 --------------------编程问答--------------------
int add( int a , int b )
{
int c;
while( c=a&b )
{
b = a^b ;
a = c < <1;
}
return a | b;
}
43楼已经发过的算法,你再发一遍有什么意思
补充:.NET技术 , C#