如何实现C语言中不同进制间的转换功能?

2026-05-05 23:122阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1145个文字,预计阅读时间需要5分钟。

如何实现C语言中不同进制间的转换功能?

前言:我们最常见的进制转换就是十进制转换为二进制,这就是不断的除法除法除法,取余数。

例如:十进制的10转换为二进制:

10÷ 2=5 余 0

5÷ 2=2 余 1

2÷ 2=1 余 0

1÷ 2=0 余 1

直到商为0,然后将余数倒序排列,得到二进制数:1010

直到商为0,然后将余数倒序排列,得到二进制数:1010

直到商为0,然后将余数倒序排列,得到二进制数:1010

直到商为0,然后将余数倒序排列,得到二进制数:1010

前言

我们最常见的进制转换就是十进制转换为二进制了,就是不停的作除法,取余数。

例如:十进制的10转换为二进制

10÷2=5···0

5÷2=2···1

2÷2=1···0

1÷2=0···1

直到商为0,然后把余数倒着写,所以10的二进制表示为1010。

十进制->N进制

会了十进制转换为二进制,那么十进制转换为任意进制也就迎刃而解了,只要不停的除法和取余就好了。

#include <iostream> #include <cstdio> #include <stack> /* * 进制转换 10——>n(n<10) * */ using namespace std; void ConvertT2N(int number,int n){ stack<char> s; if (number == 0) { //特殊情况,当输入是0时,输出也是0,否则输入0时就卡那了 s.push(0); } else { while (number) { s.push(number % n); number /= n; } } // 把栈中的余数输出 while (!s.empty()) { printf("%d", s.top()); s.pop(); } printf("\n"); } int main(){ int number; while (scanf("%d", &number) != EOF) { ConvertT2N(number, 2); } return 0; }

但是上面的代码是有一点小问题的,它只能转换10以内的进制,也就是N必须小于10,否则就会出错。例如十进制转换成十六进制就会出错。例如11转换成十六进制表示为b而不是11,因为当表示十进制以上的数时需要用到字母a,b,c,d等等。

如何实现C语言中不同进制间的转换功能?

所以需要在输出的余数上面加加工一下,把大于10的数用字母表示。

改进版代码如下:

#include <iostream> #include <cstdio> #include <stack> using namespace std; // 把整数转换成对应进制的字符,例如10的十六进制中表示为A char Int2Char(int target){ if (target < 10) { return target + '0'; } else { return target - 10 + 'A'; } } /* * 现在N可以取任意进制了 * */ void ConvertT2N(int number,int n){ stack<char> s; //因为要存字母所以用char if (number == 0) { //特殊情况,当输入是0时,输出也是0,否则输入0时就卡那了 s.push(0); } else { while (number) { s.push(Int2Char(number % n)); //在余数入栈时加工一下,把int转换成char number /= n; } } // 把栈中的余数输出 while (!s.empty()) { printf("%c", s.top()); s.pop(); } printf("\n"); } int main(){ int number; while (scanf("%d", &number) != EOF) { ConvertT2N(number, 16);//把十进制转换为十六进制 } return 0; } N进制转换成十进制

会了十进制转换为N进制,那么把N进制转换为十进制倒着来就好了,不停的乘N,加上余数。

例如:二进制的1010转换为十进制

0*2+1=1

1*2+0=2

2*2+1=5

5*2+0=10

#include<iostream> #include<cstdio> using namespace std; /* * 进制转换 N->10 * */ // 先把字母转换成数字 int Char2Int(char target) { if (target >= '0' && target <= '9') { return target - '0'; } else { return target - 'A' + 10; } } void ConverM2T(string str,int m){ int number = 0; //该数在10进制下的表示 for (int i = 0; i < str.size(); ++i) { number *= m; number += Char2Int(str[i]); } printf("%d\n", number); } int main(){ string str; while (cin >> str) { ConverM2T(str,16); //把十六进制转换为十进制 } return 0; } M进制转换为N进制

上述前两个都会了以后,实现把M进制转换成N进制了,思路是先把M进制转换成十进制,然后再把十进制的数转换成N进制。

#include <iostream> #include <cstdio> #include <stack> #include <string> using namespace std; /* * M进制转换成N进制 * */ int Char2Int(char target) { if (target >= '0' && target <= '9') { return target - '0'; } else { return target - 'A' + 10; } } // M进制转换成十进制的数返回 int ConverM2T(string str,int m){ int number = 0; //该数在10进制下的表示 for (int i = 0; i < str.size(); ++i) { number *= m; number += Char2Int(str[i]); } return number; } char Int2Char(int target){ if (target < 10) { return target + '0'; } else { return target - 10 + 'a'; } } //十进制转换成N进制 void ConvertT2N(int number,int n){ stack<char> s; while (number) { s.push(Int2Char(number % n)); number /= n; } if (s.empty()) { //当输入是0时,输出也是0 printf("0"); } while (!s.empty()) { printf("%c", s.top()); s.pop(); } printf("\n"); } int main(){ int m,n; while (scanf("%d%d",&m,&n)!=EOF){ string str; cin >> str; int number = ConverM2T(str, m);// M进制转换成十进制的数返回 // 再把该数转换成N进制 ConvertT2N(number, n); } return 0; }

本文共计1145个文字,预计阅读时间需要5分钟。

如何实现C语言中不同进制间的转换功能?

前言:我们最常见的进制转换就是十进制转换为二进制,这就是不断的除法除法除法,取余数。

例如:十进制的10转换为二进制:

10÷ 2=5 余 0

5÷ 2=2 余 1

2÷ 2=1 余 0

1÷ 2=0 余 1

直到商为0,然后将余数倒序排列,得到二进制数:1010

直到商为0,然后将余数倒序排列,得到二进制数:1010

直到商为0,然后将余数倒序排列,得到二进制数:1010

直到商为0,然后将余数倒序排列,得到二进制数:1010

前言

我们最常见的进制转换就是十进制转换为二进制了,就是不停的作除法,取余数。

例如:十进制的10转换为二进制

10÷2=5···0

5÷2=2···1

2÷2=1···0

1÷2=0···1

直到商为0,然后把余数倒着写,所以10的二进制表示为1010。

十进制->N进制

会了十进制转换为二进制,那么十进制转换为任意进制也就迎刃而解了,只要不停的除法和取余就好了。

#include <iostream> #include <cstdio> #include <stack> /* * 进制转换 10——>n(n<10) * */ using namespace std; void ConvertT2N(int number,int n){ stack<char> s; if (number == 0) { //特殊情况,当输入是0时,输出也是0,否则输入0时就卡那了 s.push(0); } else { while (number) { s.push(number % n); number /= n; } } // 把栈中的余数输出 while (!s.empty()) { printf("%d", s.top()); s.pop(); } printf("\n"); } int main(){ int number; while (scanf("%d", &number) != EOF) { ConvertT2N(number, 2); } return 0; }

但是上面的代码是有一点小问题的,它只能转换10以内的进制,也就是N必须小于10,否则就会出错。例如十进制转换成十六进制就会出错。例如11转换成十六进制表示为b而不是11,因为当表示十进制以上的数时需要用到字母a,b,c,d等等。

如何实现C语言中不同进制间的转换功能?

所以需要在输出的余数上面加加工一下,把大于10的数用字母表示。

改进版代码如下:

#include <iostream> #include <cstdio> #include <stack> using namespace std; // 把整数转换成对应进制的字符,例如10的十六进制中表示为A char Int2Char(int target){ if (target < 10) { return target + '0'; } else { return target - 10 + 'A'; } } /* * 现在N可以取任意进制了 * */ void ConvertT2N(int number,int n){ stack<char> s; //因为要存字母所以用char if (number == 0) { //特殊情况,当输入是0时,输出也是0,否则输入0时就卡那了 s.push(0); } else { while (number) { s.push(Int2Char(number % n)); //在余数入栈时加工一下,把int转换成char number /= n; } } // 把栈中的余数输出 while (!s.empty()) { printf("%c", s.top()); s.pop(); } printf("\n"); } int main(){ int number; while (scanf("%d", &number) != EOF) { ConvertT2N(number, 16);//把十进制转换为十六进制 } return 0; } N进制转换成十进制

会了十进制转换为N进制,那么把N进制转换为十进制倒着来就好了,不停的乘N,加上余数。

例如:二进制的1010转换为十进制

0*2+1=1

1*2+0=2

2*2+1=5

5*2+0=10

#include<iostream> #include<cstdio> using namespace std; /* * 进制转换 N->10 * */ // 先把字母转换成数字 int Char2Int(char target) { if (target >= '0' && target <= '9') { return target - '0'; } else { return target - 'A' + 10; } } void ConverM2T(string str,int m){ int number = 0; //该数在10进制下的表示 for (int i = 0; i < str.size(); ++i) { number *= m; number += Char2Int(str[i]); } printf("%d\n", number); } int main(){ string str; while (cin >> str) { ConverM2T(str,16); //把十六进制转换为十进制 } return 0; } M进制转换为N进制

上述前两个都会了以后,实现把M进制转换成N进制了,思路是先把M进制转换成十进制,然后再把十进制的数转换成N进制。

#include <iostream> #include <cstdio> #include <stack> #include <string> using namespace std; /* * M进制转换成N进制 * */ int Char2Int(char target) { if (target >= '0' && target <= '9') { return target - '0'; } else { return target - 'A' + 10; } } // M进制转换成十进制的数返回 int ConverM2T(string str,int m){ int number = 0; //该数在10进制下的表示 for (int i = 0; i < str.size(); ++i) { number *= m; number += Char2Int(str[i]); } return number; } char Int2Char(int target){ if (target < 10) { return target + '0'; } else { return target - 10 + 'a'; } } //十进制转换成N进制 void ConvertT2N(int number,int n){ stack<char> s; while (number) { s.push(Int2Char(number % n)); number /= n; } if (s.empty()) { //当输入是0时,输出也是0 printf("0"); } while (!s.empty()) { printf("%c", s.top()); s.pop(); } printf("\n"); } int main(){ int m,n; while (scanf("%d%d",&m,&n)!=EOF){ string str; cin >> str; int number = ConverM2T(str, m);// M进制转换成十进制的数返回 // 再把该数转换成N进制 ConvertT2N(number, n); } return 0; }