1.写一个函数算一个数的二进制(补码)表示中有几个1
#include<stdio.h>
//统计二进制数中有几个1
//如13:1101
//需要考虑负数情况 如-1 结果应该是32
// n 1101
//n-1 1100
//n 1100
//n-1 1011
//n 1000
//n-1 0111
//n 0000
//看n的变化
int funca(int c){
int count=0;
while(c){
c=c&(c-1);
//新n=n&n-1的结果;n&n-1其实是在相当于把二进制中最右边的1去掉,执行几次,就相当于有几个1
count++;
}
return count;
}
int func(unsigned int c){
int count=0;
while(c){
if((c%2)==1)//算二进制数是否是1
count++;
c=c/2;}//去掉一位二进制数
return count;
}
int fun(int c){
int count=0;
for(int i=0;i<32;i++){//int 有32个二进制
if(((c>>i)&1)==1)
count++;
}
return count;
}
int main()
{
int a;
scanf("%d",&a);
printf("%d\n",funca(a));
printf("%d\n",func(a));
printf("%d\n",fun(a));
return 0;
}
2.算两个整数的二进制位有几个位(bit)不同
//如1999 2299
//结果为7
#include<stdio.h>
int fun(int c){
int count=0;
while(c){
c=c&(c-1);
count++;}
return count;
}
int main()
{
int a,b;
scanf("%d%d",&a,&b);
int c=a^b;//确认二进制数中有几个不同位数 相同为0 相异为1
printf("%d\n",fun(c));
return 0;
}
3.获取一个整数二进制中的奇数位 偶数位 分别输出
#include<stdio.h>
void func(int m)
{
printf("奇数位:\n");
for(int i=30;i>=0;i-=2){
printf("%d",(m>>i)&1);
}
printf("\n偶数位:\n");
for(int i=31;i>=1;i-=2){
printf("%d",(m>>i)&1);
}
}
int main()
{
int a=0;
scanf("%d",&a);
func(a);
return 0;
}
4.递归将字符串逆序存储
#include<stdio.h>
int funcation(char brr[]){
int i=0;
char *end=NULL;
for(i=0;brr[i]!='\0';)
i++;
end=&brr[i];//非库函数实现的strlen
return (end-brr);
}
//递归实现将字符串内容反向逆序
//012345
//abcdef
//先将a的位置放上f 后将f的位置放为\0 以便得到真正需要处理的字符串长度 在递归结束后将f的位置放a
//依次类推
void fun(char *temp ){
char change=temp[0];
int leng=funcation(temp);
temp[0]=temp[leng-1];
temp[leng-1]='\0';
if(funcation(temp+1)>1)//只要长度超过1 就进入递归
fun(temp+1);
temp[leng-1]=change;
}
int main(){
setbuf(stdout,NULL);//clion软件及时输出缓冲区内容
char array[10]="abcdefg";
fun( array);
printf("%s",array);
return 0;
}
5.递归实现计算一个数的每位之和
#include<stdio.h>
//递归实现计算一个数的每位之和
int digsum(unsigned int a){
if(a>9)
return digsum(a/10)+a%10;
else
return a;
}
int main(){
int number=0;//1729
scanf("%d",&number);
printf("%d",digsum(number));
return 0;
}
6.递归实现N的k次方
#include<stdio.h>
//递归实现N的k次方
double fun(int c,int d){
if(d<0)//负次方
return (1.0/(fun(c,-d)));
else if(d==1)
return c;
else
return fun(c,d-1)*c;
}
int main(){
int a=0,b=0;
scanf("%d%d",&a,&b);
printf("%lf\n",fun(a,b));
return 0;
}