神奇的数字
题目描述
将字符串数字中为偶数位的数字进行翻转,将翻转后的结果进行输出。
示例1:
输入:“1234” |
---|
输出:“1432” |
说明:第2、4位为偶数,所以将其翻转后,得到 1432 |
示例2:
输入:“12346” |
---|
输出: “16342” |
说明:第2、4、5位为偶数,所以将其翻转后,得到 16342 |
备注:
数字的长度<=107,且不包含数字0 |
---|
解题思路:运用位运算中的逻辑与(&),本题就很好解了。字符数字str[i]转化为整数就是
str[i] - ‘0’,'0’的ASCII码是48。而 偶数&1 == 0,同理字符偶数&1 ==0。知道了这个解决本题就易如反掌啦。
下面是我的代码:
void change(char *str)
{
int i = 0;
int j = 0;
while(str[j]!='\0')
j++;
j--;
while(i<j)
{
if(!(str[i]&1))
{
if(!(str[j]&1))
{
str[i] = str[i]^str[j];
str[j] = str[i]^str[j];
str[i] = str[i]^str[j];
i++;
j--;
}
else
j--;
}
else
i++;
}
}