黑马程序员技术交流社区

标题: 变量问题 [打印本页]

作者: 许万里    时间: 2013-3-9 08:49
标题: 变量问题
怎么才可以 不借助第三方 变量来交换两个变量的值。?
作者: 张洪慊    时间: 2013-3-9 09:07
用^(异或)
假设有两个变量a,b (b^a^a=b)
a=a^b;(令a^b等于c)
b=a^b;(此时相当于b=(c^b-->a^b^b-->a) )
a=a^b;(a^a,但第一个a是a^b,相当于a^b^a-->b)-->a=b
以上完成交换.
作者: 李晓泉    时间: 2013-3-9 09:10
如果是int类型的变量,可以通过计算重复赋值交换变量
int a =10;
int b=5;
a=a-b;//此时a=5;
b=a+b;//此时b=10;

作者: 罗志强    时间: 2013-3-9 09:15
算术运算法
a=10;
b=20;
a=a+b;(a=30)
b=a-b;(b=10)
a=a-b(a=20);
作者: 郝滨    时间: 2013-3-9 09:49
就是两个数相加 然后再分别减去
x=x+y;
y=x-y;
x=x-y;
如果没有特殊值 乘除 乘方开方 都ok的
x=x*y;
y=x/y;
x=x/y;

作者: 张卫刚    时间: 2013-3-9 10:50
不借助第三方 变量来交换两个变量:
int   n=3;m=8;
n=n^m;                               
m=n^m;//相当于(n^m)^m               
n=n^m;//相当于n^(n^m)               

n=n+m;//这种方式有局限性,如果两个数较大相加就超出int范围了,容易损失精度
m=n-m;
n=n-m
作者: yhnan    时间: 2013-3-9 11:07
我的方法也是异或'^'
原理是:一个数'^'一个数两次还是原来的数。
如 int  x,y;
x=x^y;//(这个随便,用y也可以。但下边等号之前也要改)
y=x^y;//(因为之前设定x=x^y,这步就相当于y=x^y^y。x异或2个y,还是x。则y=x)
x=x^y;//(原理同上,之前设定y=x^y,这步的意思就是x=x^x^y。y异或了2个x,还是y。则x=y)

作者: 程天贤    时间: 2013-3-11 13:20
//定义两个int类型的变量如:a和b分别赋值为10和5,
        //不借助第三方变量写程序交换两个变量的值。
        static void Main(string[] args)
        {
            Console.WriteLine("开始a=10,b=5");
            int a = 10;
            int b = 5;
            a = a - b;//a=5,b=5
            b = a + b;//b=10,a=5;
            Console.WriteLine("交换后a={0},b={1}",a,b);
            Console.ReadKey();

        }
作者: 宋健    时间: 2013-3-11 19:19
数学算法:
           n1 = n1 - n2;
            n2 = n1 + n2;
            n1 = n2 - n1;
以上,请参考
作者: 边亮    时间: 2013-3-11 21:01
a=3,b=5;
a=a-b;//-2
b=a+b//3
a=b-a//5

纯粹的数学运算  到时候举个例子就出来了  不用死记得




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2