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