一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。 请找出这个数字。(使用位运算)
程序员文章站
2024-03-16 20:16:34
...
/*
编程实现:
一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。
请找出这个数字。(使用位运算)
*/
//思路:
//一个数异或同一个数两次,这个数的值不会变;
//0异或任何数(1次)都等于该数;
//定义一个局部变量赋值为0,让其依次与该组数据的
//每一项相与,最后观察该局部变量的值,就是要找的
//那个数.
#include<stdio.h>
#include<stdlib.h>
//找只出现一次的数的函数
int first_occer_number(int arr[],int len){
int i;
int num = 0;
for (i = 0; i < len; ++i){ //遍历数组arr
num ^= arr[i]; //num的值更新为num按位与arr[i]
}
return num; //返回num的值
}
//主函数
int main(){
int arr[] = { 1, 2, 3, 4, 5, 4, 3, 2, 1 }; //定义数组并初始化
int len = sizeof(arr) / sizeof(arr[0]); //计算并保存arr的长度
int ret = first_occer_number(arr, len);
//接收函数first_occer_number()函数调用结果
printf("%d\n", ret); //打印输出结果
system("pause");
return 0;
}