当前位置:编程学习 > C#/ASP.NET >>

C#中如何使1和2相加但不使用加减乘除符号?求详细过程!看你怎么想!

--------------------编程问答--------------------

1 ^ 2
--------------------编程问答-------------------- 1|2

或者
int[] nums = { 1, 2 };
Console.WriteLine(nums.Sum()); --------------------编程问答--------------------

1 | 2
--------------------编程问答--------------------
引用 2 楼 jiabiao113 的回复:
1|2

或者
int[] nums = { 1, 2 };
Console.WriteLine(nums.Sum());

不过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 楼 lizhibin11 的回复:
C# code

1 ^ 2

如果1和2是变量,换成其他值就不行了。只是个巧合 --------------------编程问答--------------------
引用 6 楼 dasama 的回复:
C# code

int i=1|2+1&2;


这样做应该可以的

不能出现加减乘除符号。 --------------------编程问答--------------------
左位移相当于乘法

左位移1:相当于乘2;

左位移2:相当于乘4;

左位移3:相当于乘8。

右位移相当于除法

右位移1:相当于除2;

右位移2:相当于除4;

右位移3:相当于除8。 --------------------编程问答--------------------
引用 4 楼 jiabiao113 的回复:
引用 2 楼 jiabiao113 的回复:
1|2

或者
int[] nums = { 1, 2 };
Console.WriteLine(nums.Sum());

不过Sum()也是用+来实现的

这个里面的sum功能是.net 3.0版本以上才有? --------------------编程问答--------------------
引用 13 楼 family250 的回复:
引用 4 楼 jiabiao113 的回复:
引用 2 楼 jiabiao113 的回复:
1|2

或者
int[] nums = { 1, 2 };
Console.WriteLine(nums.Sum());

不过Sum()也是用+来实现的

这个里面的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();
        }
    }
}
--------------------编程问答--------------------
引用 15 楼 caozhy 的回复:
怎么今天都是这无聊问题?

http://topic.csdn.net/u/20110613/20/64200bfb-22d0-4bda-a0ac-571ee50aa6eb.html


难道他们两一家公司面试去了?哈哈。。

--------------------编程问答--------------------
引用 17 楼 porschev 的回复:
引用 15 楼 caozhy 的回复:

怎么今天都是这无聊问题?

http://topic.csdn.net/u/20110613/20/64200bfb-22d0-4bda-a0ac-571ee50aa6eb.html


难道他们两一家公司面试去了?哈哈。。


这种公司的企业文化很不健康,有打击员工,压榨工资的嫌疑。 --------------------编程问答--------------------
引用 15 楼 caozhy 的回复:
怎么今天都是这无聊问题?

http://topic.csdn.net/u/20110613/20/64200bfb-22d0-4bda-a0ac-571ee50aa6eb.html

他现在就在我旁边 --------------------编程问答--------------------
引用 18 楼 caozhy 的回复:
引用 17 楼 porschev 的回复:
引用 15 楼 caozhy 的回复:

怎么今天都是这无聊问题?

http://topic.csdn.net/u/20110613/20/64200bfb-22d0-4bda-a0ac-571ee50aa6eb.html


难道他们两一家公司面试去了?哈哈。。


这种公司的企业文化很不健康,有打击员工,压榨工资的嫌疑。

你说对了。我们面试的同几家公司。 --------------------编程问答--------------------
引用 18 楼 caozhy 的回复:
引用 17 楼 porschev 的回复:
引用 15 楼 caozhy 的回复:

怎么今天都是这无聊问题?

http://topic.csdn.net/u/20110613/20/64200bfb-22d0-4bda-a0ac-571ee50aa6eb.html


难道他们两一家公司面试去了?哈哈。。


这种公司的企业文化很不健康,有打击员工,压榨工资的嫌疑。


确实是,盲目追求一些花哨的小技巧其实没有太多实际意义,反而有打击编程人员的意思。 --------------------编程问答--------------------
引用 19 楼 family250 的回复:
引用 15 楼 caozhy 的回复:
怎么今天都是这无聊问题?

http://topic.csdn.net/u/20110613/20/64200bfb-22d0-4bda-a0ac-571ee50aa6eb.html

他现在就在我旁边

另外,用逻辑 and 和 xor 也可以实现。

参考数字电路里面全加器、半加器的实现。 --------------------编程问答--------------------
恩。。我第一个想到的方法就是位移。。

但是这东西真的很少用。。。

这题目意义不大。。

估计最大的目地就是要让应试人写不出来。。

好降点工资。。 --------------------编程问答-------------------- 不过这个破公司搞硬件的?现在搞硬件都用 VHDL,软件化了。真看不出这种题目有什么用。 --------------------编程问答--------------------
引用 23 楼 porschev 的回复:
恩。。我第一个想到的方法就是位移。。

但是这东西真的很少用。。。

这题目意义不大。。

估计最大的目地就是要让应试人写不出来。。

好降点工资。。

不用位移。 --------------------编程问答--------------------
引用 23 楼 porschev 的回复:
恩。。我第一个想到的方法就是位移。。

但是这东西真的很少用。。。

这题目意义不大。。

估计最大的目地就是要让应试人写不出来。。

好降点工资。。


感觉位移在这上面用不着哦,位移是倍数关系,如果换成另外一个兄弟那个题(任意2个整型,而非特指1+2)的话,就更不行了。 --------------------编程问答--------------------
引用 25 楼 caozhy 的回复:
引用 23 楼 porschev 的回复:
恩。。我第一个想到的方法就是位移。。

但是这东西真的很少用。。。

这题目意义不大。。

估计最大的目地就是要让应试人写不出来。。

好降点工资。。

不用位移。


可能是。。。但是位移肯定能出来。。。只是操作次数的问题。。。

但是面试题。。我想不会太难。。 --------------------编程问答-------------------- 有意思啊…… --------------------编程问答--------------------
引用 26 楼 mafangming 的回复:
引用 23 楼 porschev 的回复:
恩。。我第一个想到的方法就是位移。。

但是这东西真的很少用。。。

这题目意义不大。。

估计最大的目地就是要让应试人写不出来。。

好降点工资。。


感觉位移在这上面用不着哦,位移是倍数关系,如果换成另外一个兄弟那个题(任意2个整型,而非特指1+2)的话,就更不行了。


两个整型就一定能出来 --------------------编程问答--------------------
引用 16 楼 caozhy 的回复:
再给个办法:

C# code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] arg……


学习了。。。这种题真是思路多。。。呵呵。。 --------------------编程问答--------------------
引用 16 楼 caozhy 的回复:
再给个办法:


C# code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(st……

高手,谢谢了。兄弟 --------------------编程问答--------------------
引用 31 楼 family250 的回复:
引用 16 楼 caozhy 的回复:
再给个办法:


C# code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Ma……

一会儿给你个真正在 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;
        } --------------------编程问答--------------------
引用 34 楼 whycom 的回复:
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++……

顶。看上样的比某些胡扯的好。 --------------------编程问答-------------------- 主要还是两类
1 用某些API实现
2 用某种运算实现

想起个线程安全中碰到的原子操作

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应该要传递引用进去的
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 --------------------编程问答--------------------
引用 34 楼 whycom 的回复:
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++……


这个精炼,顶一下 --------------------编程问答-------------------- dingqi.... --------------------编程问答--------------------
引用 38 楼 caozhy 的回复:
给一个一位全加器实现的任意位正整数加法计算。
C# code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Mail;

namespace ConsoleApplication1
{
    class Program
    {
 ……

仅目测就看到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++;

不是更简单 --------------------编程问答-------------------- --------------------编程问答-------------------- ++不能算。 --------------------编程问答--------------------
引用 47 楼 lizhibin11 的回复:
++不能算。


这个其实不是主要问题。因为++只是简单的循环变量。 --------------------编程问答-------------------- --------------------编程问答--------------------

int   add(   int   a   ,   int   b   ) 

int   c; 
while(   c=a&b   ) 

b   =   a^b   ; 
a   =   c < <1; 

return   a   |   b; 




--------------------编程问答-------------------- C语言观光团代表前来慰问 --------------------编程问答--------------------
引用 51 楼 laiwusheng 的回复:
C语言观光团代表前来慰问

43楼已经发过的算法,你再发一遍有什么意思
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,