# 函数+进制转换器v1.0beta

1.程序的运行截图

2.pass

3.介绍函数及其功能

（1）将二进制数转换为八进制和十进制数的函数

void twochange(int x) {
//二转八
//整数部分
int x1, x2 = x, x3, cnt = 0, mount, s1 = 0, s2 = 0;
while (x2 != 0) {
x2 /= 10;
cnt++;
}
x2 = x;
if (cnt % 3 == 0) {
mount = cnt;
x2 = x;
}
else if(cnt%3==1){
mount += 2;
x2 *= pow(10, 2);
}
else if (cnt % 3 == 2) {
mount += 1;
x2 *= pow(10, 1);
}
mount /= 3;
while (x2 != 0) {
x1 = x2 % 1000;
s1 += x1 * pow(1000, mount - 1);
x2 /= 1000;
mount--;
}
printf("八进制：");
while (s1 != 0) {
x1 = s1 % 1000;//划分
s1 /= 1000;
int n = 0;
while (x1 != 0) {//三个二进制数
x3 = x1 % 10;
s2 += x3 * pow(2, n);
x1 /= 10;
n++;
}
printf("%d", s2);
s2 = 0;
}
printf("\n");
//小数部分
//二转十
//整数部分
int x11, x21 = x, x31, cnt1 = 0, s11 = 0, i = 0;
while (x21 != 0) {
x11 = x21 % 10;
s11 += x11 * pow(2, i);
i++;
x21 /= 10;
}
printf("十进制：%d", s11);
//小数部分
}


（2）将八进制数转为二进制和十进制数的函数

void eightchange(int x) {
//八转二
//整数部分
int x1, x2 = x, x3, s1 = 0, s2 = 0, i, cnt = 0;
printf("二进制:");
while (x2 != 0) {
x2 /= 10;
cnt++;
}
x2 = x;
while (x2 != 0) {
x1 = x2 % 10;
s1 += x1 * pow(10, cnt - 1);
x2 /= 10;
cnt--;
}
x2 = s1;
while (x2 != 0) {
x1 = x2 % 10;
i = 0;
while (x1 != 0) {
x3 = x1 % 2;
s2 += x3 * pow(10, i);
i++;
x1 /= 2;
}
printf("%03d", s2);
s2 = 0;
x2 /= 10;
}

printf("\n");
//小数部分
//八转十
//整数部分
int x11, x21 = x, x31, s11=0;
cnt = 0;
i = 0;
while (x21 != 0) {
x11 = x21 % 10;
s11 += x11 * pow(8, i);
i++;
x21 /= 10;
}
printf("十进制：%d", s11);
//小数部分
}


（3）将十进制数转为二进制和八进制数的函数

void tenchange(int x) {
//十转二
//整数部分
int x1, x2 = x,s1=0,i=0;
while (x2 != 0) {
x1 = x2 % 2;
s1 += x1 * pow(10, i);
i++;
x2 /= 2;
}
printf("二进制：%d\n", s1);
//小数部分
//十转八
//整数部分
int s2;
i = 0;
s1 = 0;
x2 = x;
while (x2 != 0) {
x1 = x2 % 8;
s1 += x1 * pow(10, i);
i++;
x2 /= 8;
}
printf("八进制：%d", s1);
//小数部分
}


4.main函数

int main(){ int number, x; //输入 printf("(输入1表示二进制，输入2表示八进制，输入3表示十进制)\n请选择要输入的数的进制:"); scanf("%d", &number); printf("请输入一个十位以内正整数："); scanf("%d", &x); int i,x1,x2 = x,cnt=0,p; while (x2 != 0) {  x2 /= 10;  cnt++; } x2 = x; x1 = x2 % 10; x2 /= 10; if (x1 >= 0 && x1 <= 1) {  x1 = x2 % 10;  for (i = 2; x2 != 0;i++) {   if (x1 >= 0 && x1 <= 1) {    x2 /= 10;   }   else {    break;   }  } } else if (x1 >= 0 && x1 <= 7) {  x1 = x2 % 10;  for (i = 2; x2 != 0; i++) {   if (x1 >= 0 && x1 <= 1) {    x2 /= 10;   }   else {    break;   }  } } else if (x1 >= 0 && x1 <= 9) {  x1 = x2 % 10;  for (i = 2; x2 != 0; i++) {   if (x1 >= 0 && x1 <= 1) {    x2 /= 10;   }   else {    break;   }  } } if (number == 1&&i>cnt) {  printf("二进制转成\n");  twochange(x); } else if (number == 2 && i > cnt) {  printf("八进制转成\n");  eightchange(x); } else if (number == 3 && i > cnt) {  printf("十进制转成\n");  tenchange(x); } return 0;}


5.思维导图

6.碰到的问题：

7.代码互评

void Numchange(int m, int b)//将10进制数转化为任意进制数
{

int n = m;
int count = 0;
if (m == 0) printf("0");
while (n != 0)
{
n = n / b;
count++;
}
int number;
for (int i = count; i >= 1; i--)
{
number = m / (int)pow(b, i - 1);
if (number < 10) {
printf("%d", number);
}
else {
printf("%c", number + 55);
}
m = m % (int)pow(b, i - 1);
}
}


我的代码只能将10进制特定转换另外两个进制，人家的能随机转成任意进制，不得不说很值得学习，他的代码输入了两个值，而我的只传入一个值，在这点上造成了我的代码只能单纯的进行特定转换的缺陷。

8.

posted @ 2019-11-08 00:22  月光寰宇（白靖）  阅读(241)  评论(0编辑  收藏  举报