一个整数的二进制序列倒置后再转换为十进制的整数
程序员文章站
2023-12-27 21:42:09
...
1.一个整数的二进制序列倒置后再转换为十进制的整数
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
(1),先将这个函数的二进制序列存入一个数组,再根据二进制与十进制之间的转换来求解新的整数
unsigned int reverse_bit(unsigned int value)
{
int i = 0;
int count = 0;
int arr[32] = {0};
unsigned x = 1;
unsigned int sum = 0;
int j = 0;
//先将此整数的二进制序列存入数组
for(i = 0;i < 32; i++)
{
if(((value>>i)&1) == 1)
{
arr[i] = 1;
}
else
{
arr[i] = 0;
}
}
//将新的二进制序列转换为整数
for(j = 0;j < 32; j++)
{
if(arr[j] == 1)
{
count++;
for(i = 31 - j , x = 1;i > 0; i--)
{
x = x * 2;
}
printf("%d\n", x);
sum = sum +x;
}
}
return sum;
}
int main()
{
int a = 0;
unsigned int b = 0;
scanf("%d", &a);
b = reverse_bit(a);
printf("%d\n", b);
system("pause");
return 0;
}
2.不使用(a+b)/2的方式来求解a,b的平均值
(1)头文件
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
(2)用右移运算符来计算,右移一位代表除二
int aver( int a,int b)
{
a = a + b;
a = a>>1;
return a;
}
int main()
{
int x = 0;
int y = 0;
int z = 0;
printf("请输入两个数");
scanf("%d%d", &x, &y);
z = aver(x, y);
printf("%d\n", z);
system("pause");
return 0;
}
3.一组数据只有一位数是单独存在的,其他都是成对存在的
头文件
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
用数组的下表来算每个数字,比如(定义
int a[10] ={0};如果1出现,则啊a[1]++,如果1再次出现a[1]–,这样等所有计算完之后扫描这个数组,下表谁不为0,那么它就是只出现了一次的数)
int Text(int y)
{
int q = y;
int i = 0;
int a[10] = {0};
while(q != 0)
{
y = q % 10;
if(a[y] == 0)
{
a[y] = 1;
}
else
{
a[y] = 0;
}
q = q/10;
}
for(i = 0; i < 10; i++)
{
if(a[i] != 0)
{
return i;
}
}
}
int main()
{
int z = 0;
int x = 0;
printf("请输入一串只有一位数独立,其他数都是成对出现的:");
scanf("%d", &x);
z = Text(x);
printf("%d", z);
system("pause");
return 0;
}
将(student a am i)变成(i am a student)并且不能使用库函数。
头文件
#include<stdio.h>
先计算这个数组的长度
再对这个函数倒置(先定义两个指针分别指向一个字符串的头和尾,对两个指针之间的字符串倒置,倒置完所有的字符串之后,在对数组整体倒置)
void N_Inversion(char *n_p, char *n_q)//对两个指针之间的字符串倒置
{
while(n_p < n_q)
{
int tmp = *n_p;
*n_p = *n_q;
*n_q = tmp;
n_p++;
n_q--;
}
}
void Inversion(char arr[], int sz)
{
char *p = arr;
char *q = arr;
int i = 0;
for(i = 0; i <= sz; i++)
{
if(arr[i] == ' '||arr[i] =='\0')
{
q = &arr[i-1];
N_Inversion(p,q);
p = &arr[i+1];
}
}
p = arr;
q = &arr[sz-1];
N_Inversion(p,q);
}
int S(char arr[])//计算数组的长度
{
int i = 0;
for(i = 0; arr[i] != '\0';i++ )
{
;
}
return i;
}
int main()
{
char a[30] = "student a am i";
int x = S(a);
Inversion(a, x);
printf("%s\n", a);
system("pause");
return 0;
}