进制转换
程序员文章站
2022-07-13 13:17:01
...
//编译器用G++不然c++函数会CE,因为C++不支持itoa函数
/*
[itoa](https://baike.baidu.com/item/itoa)() 函数有3个参数:第一个参数是要转换的数字,第二个参数是要写入转换结果的目标字符串,第三个参数是转移数字时所用的基数(进制)。在上例中,转换基数为10,就意味着以10为转换进制。10:十进制;2:二进制...
itoa 并不是一个标准的C函数,它是Windows特有的,如果要写跨平台的程序,请用sprintf。
标准库中有sprintf,功能比这个更强,用法跟printf类似:
char str[255];
sprintf(str, "%x", 100); //将100转为16进制表示的字符串
*/
#include<cstdio>
#include<cstdlib>
#include<iostream>
using namespace std;
long toTen(char a[], int bit) //任意进制转换为10进制
{
int length = strlen(a);
int i, b = 1, sum = 0; //i要做数组a的下标,注意其起止范围
for (i = length - 1; i >= 0; i--)
{
if (a[i] >= 'A')
{
sum += (a[i] - 'A' + 10) *b;
b *= bit;
}
else
{
sum += (a[i] - '0') *b;
b *= bit;
}
}
return sum;
}
int main() //~itoa函数为10进制转换为任意进制
{
int a,n;
char temp[200];
while(cin >> a >> n != NULL)
{
int flag = 0;
if(a < 0)
{
flag = 1;
a = -a;
}
if(flag) cout << '-';
_itoa(a, temp, n);
for(int i = 0;temp[i];i++) //判断16进制中的字母是否需要大小写
{
if(temp[i] >= 'a'&&temp[i] <= 'z')
temp[i] = temp[i] - 32;
}
cout << temp << endl;
}
return 0;
}