//4:有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student".
#include <stdio.h>
#include<windows.h>
#include <string.h>
//把每次解析出来的单词翻转
void fanw(char *l, char *r)
{
char* left = l;
char* right = r;
char temp;
while (left < right)
{
temp = *left;
*left = *right;
*right = temp;
left++;
right--;
}
}
//解析出来每个单词
void fans(char *p)
{
while (*p != '\0')
{
char *pst = p;
while (*p != '\0' && *p != ' ')
{
p++;
}
fanw(pst, p - 1);
p++;
}
}
int main()
{
char p[30] = "student a am i";
int len = strlen(p);
printf("原字符串是:%s\n", p);
printf("翻转后的字符串是:");
fanw(p, p + len - 1);
fans(p);
printf("%s\n", p);
system("pause");
return 0;
}
//3:一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。
//请找出这个数字。(使用位运算)
/*#include<stdio.h>
#include<windows.h>
int main()
{
int a[] = { 1, 2, 6, 5, 5, 8, 1, 9, 6, 4, 4, 8, 9 };
int size = sizeof(a) / sizeof(a[0]);
int i = 0;
for (i=1; i < size; i++)
{
a[0] ^= a[i];//用按位异或可以得到两个数A,B不同部分C,再接着用C异或B可以得到A
}
printf("different num:%d\n", a[0]);
system("pause");
return 0;
}*/
//2:不使用(a+b)/2这种方式,求两个数的平均值。
//方法1
/*#include <stdio.h>
#include <windows.h>
int main()
{
int a = 25;
int b = 5;
printf("%d\n", (a&b) + ((a^b) >> 1));//左移相当于乘2,右移相当于除以2
system("pause");//按位与找相同部分,按位异或找不同部分
return 0;
}*///相同部分加上不同部分的二分之一
//方法2
/*2:#include<stdio.h>
#include<windows.h>
int fun(int a, int b)
{
int average = 0;
average = (a + b) >> 1;
return average;
}
int main()
{
int a, b;
int average;
printf("please enter two nums:");
scanf_s("%d %d\n", &a, &b);
average = fun(a, b);
printf("%d\n", average);
system("pause");
return 0;
}*///存在溢出问题,当A,B无限大时,此方法不适用
//1:unsigned int reverse_bit(unsigned int value);
//这个函数的返回值value的二进制位模式从左到右翻转后的值。
/*#include<stdio.h>
#include<windows.h>
#include<math.h>
unsigned int reverse_bit(unsigned int value)
{
int ret=0;
int i = 0;
for (i = 0; i < 32; i++)
{
ret += ((value >> i) & 1)*pow(2.0, 31 - i); //实际上没有翻转,只是从最低位向最高位扩展求得
}
return ret;
}
int main()
{
unsigned int value, back;
printf("请输入一个整数:");
scanf_s("%u", &value);
back = reverse_bit(value);
printf("翻转后的值为:%u\n", back);
system("pause");
return 0;
}*/
:unsigned int reverse_bit(unsigned int value); //这个函数的返回值value的二进制位模式从左到右翻转后的值
最新推荐文章于 2021-04-01 22:52:11 发布