#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
输入两个数字求它的最小公倍数
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
int j = 1;
while (1)
{
if (j % a == 0 && j % b == 0)
{
printf("%d\n", j);
break;
}
else
j++;
}
return 0;
}
输入一句话,将它倒置
I like beijing
beijing like I
void reverse(char*left, char* right)
{
char tmp = 0;
while (left < right)
{
tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
int main()
{
char arr[100] = { 0 };
gets(arr);
//char * gets ( char *str );
//pointer to a block of memory (array of char) where the string reaf is copied as a C string
//三步翻转法
//1.字符串整体翻转
int len = strlen(arr);
reverse(arr, arr + len - 1);
//2.没个单词逆序
char* start = arr;
while (*start)
{
char* end = start;
while (*end != ' ' && *end != '\0')
{
end++;
}
reverse(start, end - 1);
if (*end == ' ')
start = end + 1;
else
start = end;
}
printf("%s\n", arr);
return 0;
}
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int a, b, c;
a = 5;
c = ++a;
b = ++c, c++, ++a, a++;
b += a++ + c;
printf("%d %d %d", a, b, c);//a=9 b=23 c=8
return 0;
}
写一个函数返回参数二进制中1的个数
123
123 % 10 = 3
123 / 10 = 12
15 % 2=1
15 / 2=7
7 % 2=1
7 / 2=3
负数无法用
int NumberOf1(int n)
{
int count = 0;
while (n)
{
if (n % 2 == 1)
{
count++;
}
n = 2; //记得赋值
}
return count;
}
int NumberOf1(int n)
{
int count = 0;
int i = 0;
for (i = 0;i < 32;i++)
{
if (((n >> i) & 1) == 1)
{
count++;
}
}
return count;
}
int NumberOf1(int n) //还可以优化
{
int count = 0;
int i = 0;
while (n)
{
n = n & (n - 1); //进行了几次就有几个1
count++;
}
return count;
}
int main()
{
int n = 15;
int ret = NumberOf1(n);
printf("ret = %d\n", ret);
return 0;
}
写一个代码判断一个数字是不是2的n次方
2的n次方的数字,其实只有一个1
k & (k-1) == 0
判断两个int的数m和n,有几个二进制位不相同
int NumberOf1(int n)
{
int count = 0;
int i = 0;
for (i = 0;i < 32;i++)
{
if (((n >> i) & 1) == 1)
{
count++;
}
}
return count;
}
int main()//还可以优化
{
int m = 0;
int n = 0;
int i = 0;
int count = 0;
scanf("%d %d", &m, &n);
int ret = m ^ n; //相同为0,相异为1
//统计一下ret的2进制中有几个1,就说明m和n的二进制位中有几个位不同
count = NumberOf1(ret);
printf("%d\n", count);
/*for (i = 0;i < 32;i++)
{
if (((m >> i) & 1) != ((n >> 1) & 1))
{
count++;
}
}
printf("%d\n", count);*/
return 0;
}
获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列
int main()
{
int n = 0;
scanf("%d", &n);
//获取n的二进制中的奇数位和偶数位
int i = 0;
for (i = 31;i >= 1;i -= 2)
{
printf("%d ", (n >> i) & 1);
}
//打印奇数位
for (i = 30;i >= 0;i -= 2)
{
printf("%d ", (n >> i) & 1);
}
return 0;
}
交换两个变量(不创建临时变量)
int main()
{
int a = 10;
int b = 20;
a = a ^ b;
b = a ^ b; //b = a
a = a ^ b; //a^b^a
printf("a==%d b==%d", a, b);
return 0;
}
下列代码运行的结果是什么?
int main()
{
int arr[] = { 1,2,3,4,5 };
//10进制:1
//2进制:00000000 00000000 00000000 00000001
//16进制:00 00 00 01 小端存储
//01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00
short* p = (short*)arr;//如果地址是short类型, +1 后解引用2个字节
int i = 0;
for (i = 0;i < 4;i++)
{
*(p + i) = 0;
}
//00 00 00 00 00 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00
for (i = 0;i < 5;i++)
{
printf("%d ", arr[i]); //输出结果是 0 0 3 4 5
}
return 0;
}