在采访中提出的一个非常棘手的问题.
交换两个变量的值,如a=10和b=15.
通常要交换两个变量值,我们需要第三个变量,如:
temp=a;
a=b;
b=temp;
Run Code Online (Sandbox Code Playgroud)
现在的要求是,在不使用第三个变量的情况下交换两个变量的值.
我偶然发现了这个代码,用于交换两个整数而不使用临时变量或使用按位运算符.
int main(){
int a=2,b=3;
printf("a=%d,b=%d",a,b);
a=(a+b)-(b=a);
printf("\na=%d,b=%d",a,b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但我认为这段代码在swap语句中有未定义的行为,a = (a+b) - (b=a);因为它不包含任何序列点来确定评估的顺序.
我的问题是:这是交换两个整数的可接受的解决方案吗?
它是如何进行交换的?
A = A + B
B = A + B
A = B +一
我不同意它换成书!
书中的选项包括"a和b的值的互补","否定和b".希望这些选项也不令人满意吗?
如何在Java中将String转换为适当的位置
输入字符串:1234输出应该:4321
我试过的.
public static void main(String args[])
{
String number = "1234";
System.out.println("original String: " + number); String reversed = inPlaceReverse(number);
System.out.println("reversed String: " + reversed);
}
public static String inPlaceReverse(final String input)
{
final StringBuilder builder = new StringBuilder(input);
int length = builder.length();
for (int i = 0; i < length / 2; i++)
{
final char current = builder.charAt(i);
final int otherEnd = length - i - 1;
builder.setCharAt(i, builder.charAt(otherEnd)); // swap
builder.setCharAt(otherEnd, current);
}
return builder.toString(); …Run Code Online (Sandbox Code Playgroud)