1.在C中,按指定进制格式输出如下,
printf("%05o\n",35); //按八进制格式输出,保留5位高位补零
printf("%03d\n",35); //按十进制格式输出,保留3位高位补零
printf("%05x\n",35); //按十六进制格式输出,保留5位高位补零
2.在C++中,按指定进制格式输出如下,
#include <bitset>
#include<iostream>
using namespace std;
int main()
cout << "35的8进制:" << std::oct << 35<< endl;
cout << "35的10进制" << std::dec << 35 << endl;
cout << "35的16进制:" << std::hex << 35 << endl;
cout << "35的2进制: " << bitset<8>(35) << endl; //<8>:表示保留8位输出
return 0;
二,C/C++各种进制转换库函数
一)任意2-36进制数转化为10进制数。
建议自己写函数,代码如下:
int Atoi(string s,int radix) //s是给定的radix进制字符串
int ans=0;
for(int i=0;i<s.size();i++)
char t=s[i];
if(t>='0'&&t<='9') ans=ans*radix+t-'0';
else ans=ans*radix+t-'a'+10;
return ans;
1.strtol()函数(百度百科)
函数原型:long int strtol(const char *nptr, char **endptr, int base)
base是要转化的数的进制,非法字符会赋值给endptr,nptr是要转化的字符,例如:
#include<cstdio>
int main()
char buffer[20]="10549stend#12";
char *stop;
int ans=strtol(buffer, &stop, 8); //将八进制数1054转成十进制,后面均为非法字符
printf("%d\n",ans);
printf("%s\n", stop);
return 0;
输出结果:
9stend#12
①如果base为0,且字符串不是以0x(或者0X)开头,则按十进制进行转化。
②如果base为0或者16,并且字符串以0x(或者0X)开头,那么,x(或者X)被忽略,字符串按16进制转化。
③如果base不等于0和16,并且字符串以0x(或者0X)开头,那么x被视为非法字符。
④对于nptr指向的字符串,其开头和结尾处的空格被忽视,字符串中间的空格被视为非法字符。
二)将10进制数转换为任意的n进制数,结果为char型。
建议自己写,代码如下:
string intToA(int n,int radix) //n是待转数字,radix是指定的进制
string ans="";
int t=n%radix;
if(t>=0&&t<=9) ans+=t+'0';
else ans+=t-10+'a';
n/=radix;
}while(n!=0); //使用do{}while()以防止输入为0的情况
reverse(ans.begin(),ans.end());
return ans;
1.itoa()函数(可以将一个10进制数转换为任意的2-36进制字符串)
函数原型:char*itoa(
int
value,
char
*string,
int
radix);
例如:itoa(num, str, 2); num是一个int型的,是要转化的10进制数,str是转化结果,后面的值为目标进制。
#include<cstdio>
#include<cstdlib>
int main()
int num = 10;
char str[100];
_itoa(num, str, 2); //c++中一般用_itoa,用itoa也行,
printf("%s\n", str);
return 0;
2.sprintf()函数(可以将一个10进制数转换为指定格式的n进制字符串)
函数原型:int sprintf( char *buffer, const char *format, [ argument] … );
#include<cstdio>
int main()
char s[100]={0};
sprintf(s, "%d", 123); //十进制输出产生"123"
sprintf(s, "%4d%4d", 123, 4567); //指定宽度不足的左边补空格,产生:" 1234567"
sprintf(s, "%8o", 123); //八进制输出,宽度占8个位置
sprintf(s, "%8x", 4567); //小写16 进制,宽度占8 个位置,右对齐
sprintf(s, "%10.3f", 3.1415626); //产生:" 3.142"
int i = 100;
sprintf(s, "%.2f", i); //注意这是不对的
sprintf(s, "%.2f", (double)i); //要按照这种方式才行
return 0;
三)使用字符串流stringstream(头文件#include<sstream>)
1.将八,十六进制转十进制。
#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int main(void)
string s="20";
int a;
stringstream ss;
ss<<hex<<s; //以16进制读入流中
ss>>a; //10进制int型输出
cout<<a<<endl;
return 0;
//输出:32
2.将十进制转八,十六进制。
#include<cstdio>
#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int main(void)
string s1,s2;
int a=30;
stringstream ss;
ss<<oct<<a; //10进制转成八进制读入流中,再以字符串输出
ss>>s1;
cout<<s1<<endl; //输出:36
ss.clear(); //不清空可能会出错。
ss<<hex<<a; //10进制转成十六进制读入流中,,再以字符串输出
ss>>s2;
cout<<s2<<endl; //输出:1e
return 0;
一,指定格式输出 1.在C中,按指定进制格式输出如下,printf("%05o\n",35); //按八进制格式输出,保留5位高位补零printf("%03d\n",35); //按十进制格式输出,保留3位高位补零printf("%05x\n",35); //按十六进制格式输出,保留5位高位补零2.在C++中,按指定进制格式输出如下,#include ...
long strtol( const char *str, char **str_end, int base);
参数详细说明请 参考文档
注意:这个函数在c标准库stdlib中,所以需要 #include<cstdlib>
#include <stdio>
#include <errno>
#include <stdlib>
int main(void)
// parsing with error handling
const char *p = 10 200000000000
它的功能是将一个任意1-36进制数转化为10进制数,返回是long int型。
函数为long int strtol(const char *nptr, char **endptr, int base)
base是要转化的数的进制,非法字符会赋值给endptr,nptr是要转化的字符,例如:
char buffer[20]="10379cend$3";
int toDecimal(string s,int radix){ //s是给定的radix进制字符串
int ans=0;
for(int i=0;i<s.size();i++){
char t=s[i];
if(t>='0'&&t<='9') ans=ans*radix + (t-'0');
else ans=ans
文章目录一、指定格式转换输出二、任意2~36进制数转化为10进制数三、10进制数转换为任意的n进制数四、例题及题解
一、指定格式转换输出
直接通过C/C++输出格式转换为相应进制的数。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <bitset>
us...
在自定义结构体中:
默认值同变量一样,int型的为0,指针型的为“NULL”------------并不是整个结构体为NULL,其中的int型还是有值0的,只是指针型的为NULL。例如
struct node{
int v,dis;
如果需要手动添加构造函数,代码如下:
struct node{
int v,dis;
node(int ...
string convertBase(string num, int oldBase, int newBase) {
int decimalNum = 0;
int power = 1;
bool isNegative = (num[0] == '-');
// Convert to decimal base
for (int i = num.size() - 1; i >= isNegative ? 1 : 0; i--) {
int digitValue = isdigit(num[i]) ? num[i] - '0' : num[i] - 'A' + 10;
decimalNum += digitValue * power;
power *= oldBase;
// Convert to new base
string newNum;
while (decimalNum > 0) {
int remainder = decimalNum % newBase;
char digitChar = (remainder < 10) ? remainder + '0' : remainder - 10 + 'A';
newNum += digitChar;
decimalNum /= newBase;
if (newNum.empty()) {
newNum = "0";
if (isNegative) {
newNum += '-';
// Reverse the result and return
reverse(newNum.begin(), newNum.end());
return newNum;
int main() {
string num;
int oldBase, newBase;
cout << "Enter a number: ";
cin >> num;
cout << "Enter the old base: ";
cin >> oldBase;
cout << "Enter the new base: ";
cin >> newBase;
cout << num << " in base " << oldBase << " is " << convertBase(num, oldBase, newBase) << " in base " << newBase << endl;
return 0;
该函数使用两个参数:要转换的数字和两个进制值(旧进制和新进制)。它首先将该数字转换为十进制,然后将其转换为新进制。在转换过程中,该函数会使用余数和商的计算来获得新进制下的每一位。最后,新数被反转并返回。
请注意,此函数仅适用于非负整数。如果输入数字为负数,则应在函数中进行适当的更改。