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去掉,执行几次,就相当于有几个1count++;}return count;
}int func(unsigned int c){int count=0;while(c){if((c%2)==1)//算二进制数是否是1count++;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 相异为1printf("%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];//非库函数实现的strlenreturn (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;elsereturn a;
}
int main(){int number=0;//1729scanf("%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;elsereturn 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;
}