#include<stdio.h>
#include<string.h>
#define maxn 1000
int getdigits(int n)//获取数字位数
{
int cnt = 0;
while(n != 0){
n = n/10;
cnt++;
}
return cnt;
}
int to_decim1(int n)//整数转换为 十进制
{
int cnt = getdigits(n);
int v = 0;
int m;
while(cnt--){
m = 1;
for(int i = 0; i < cnt; i++)
m *= 10;
v = v*2 + n/m;
n = n%m;
}
return v;
}
int to_decim2(char *a)//字符串中的二进制字符转换为十进制
{
int sum = 0;
int j = 1;
int len = strlen(a); (1)方法1 逆序 加
// for(int i = len-1; i >= 0; i--){
// sum += j*(a[i]-'0');
// j *= 2;
// }
int v = 0;(2)方法2 顺序 加
int i = 0;
while(len--){
v = v*2 + a[i++]-'0';
}
return v;
}
void to_binary(int n) //十进制转换为二进制
{
if(n == 1 || n == 0){
printf("%d",n);
return ;
}
to_binary(n/2);
printf("%d",n%2); //递归逆序输出
}
int main()
{
char a[maxn];
printf("\n输入要转换的二进制数:\n");
int n, m;
scanf("%d",&n);
printf("%d 的十进制为\t%d\n",n, to_decim1(n));
printf("请输入二进制字符:\n");
scanf("%s",a);
int rel2 = to_decim2(a);
printf("%s 的十进制为\t%d\n",a, rel2);
printf("请输入要转换为二进制的数:\n");
scanf("%d",&m);
printf("%d 的二进制为:\t",m);
to_binary(m);
return 0;
}