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 ;
}