十进制转换为任意进制代码方法
#include<stdio.h>
int main()
{
int a,b,count=0,i;
scanf("%d%d",&a,&b);//a为需要转换的十进制数,b为需要转换成的进制数
int arr[100];
do
{
arr[count++]=a%b; //举个例子比如说100转换为8进制
//100%8=4,100/8=12,12%8=4,12/8=1;1%8=1,1/8=0;
//通过观察 1 4 4组成的144就是100转换为8进制后的数
//该算法建议在理解的基础上背诵它的转换方法
a=a/b;
} while(a!=0);
for(i=count-1;i>=0;i--)
{
printf("%d",arr[i]);
}
}
任意进制数转换为十进制
#include<stdio.h>
#include<math.h>
int main()
{
int arr[100],count=0,a,b,i,res=0;//res 是result结果的意思
scanf("%d%d",&a,&b);//a为需要转换为十进制的数,b为a的进制数
//举个例子 144 ,8进制的数想要转换为10进制
// 观察发现 百位是1,十位是4,个位是4,1*8^2+4*8^1+4*4^0=144
// 百位 十位 个位
do
{
arr[count++]=a%10;//用一个容器arr来存储a的末位上的数字
a=a/10;
}while(a!=0);
for(i=count-1;i>=0;i--)//逆序输出
{
res=arr[i]*pow(b,i)+res;//这个是通过推导的具体数字总结的公式
//这里调用函数pow要用头文件 #include<math.h> b指下面的数,i它对应的指数
}
printf("%d",res);
}
在C++中,可以直接调用函数进制转换
#include <iostream>
using namespace std;
int main()
{ cout << "35的8进制:" << oct << 35 << endl; // 八进制octonary 使用方法是 <<____<<num ____里面选择需要转换为八进制的oct ,num为需要被转换的数
cout << "35的10进制" << dec << 35 << endl; //十进制decimalism <<____<<num ____里面选择需要转换为十进制的dec ,num为需要被转换的数
cout << "35的16进制:" << hex << 35 << endl; //十六进制hexadecimal <<____<<num ____里面选择需要转换为十六进制的hex,num为需要被转换的数
}
此外,C++通过调用biset函数将十进制数转换为二进制
#include <iostream>
#include <bitset>
using namespace std; //任意数转换为2进制1.
//定义:bitset< n > s;
//表示一个n位的二进制数,<>中填写位数;默认()中的数为十进制
int main()
{ cout << "35的2进制(显示8位):" << bitset<8>(35) << endl;
cout << "35的2进制(显示18位):" << bitset<18>(35) << endl; //在<_>中,__横线上填写转换为二进制后需要显示的位数 ()内写需要被转换成二进制的数
cout << "35的2进制(显示3位):" << bitset<3>(35) << endl; //注意:在使用这个函数前需要调用头文件 #include <bitset>
}
以下这个函数是能将2至36进制字符串转换为10进制的函数(c++)
#include <iostream>
#include <algorithm>//需要调用这个头文件
using namespace std;
int main()
{
//
char buffer[20]="10549stend#12";
char *stop;
int ans=strtol(buffer, NULL,8);//第一种写法,前面的buffer数组表示需要转换的字符串,传递数组的首地址
//后面的8表示需要将前面的字符串转换成的有效的八进制字符串,再将这个八进制的字符串转换为十进制的字符串,并返回该值
// strtol函数会将参数字符串根据参数base来转换成长整型数,参数base范围从2至36。
cout << ans << endl ; //这行输出的556是前面字符串识别到的1054(八进制),识别到9超出范围停止识别,
//再将已经识别的有效字符串转换为十进制结果是556
//中间为什么是NULL请看下面
//还是同样的数字,不过 NULL-->&stop ,发生了变化,它的意思是把buffer这个字符串分成两部分,前面一部分有效识别的转换为十进制并返回该值
//后面的错误识别部分字符串存储到这个新的位置stop,记住格式,括号里面写&stop
int ans1=strtol(buffer, &stop,8);
cout << ans1 << endl << stop;//此处再输出stop表示的是buffer中无效的字符串 ,ans1表示的是前面已经被识别并转换为十进制的字符串
//如果不想返回利用无效的字符串部分,写前面的NULL即可
//建议读者模仿学习这个格式
}
以下文字转载别人的
long int strtol(const char *nptr, char **endptr, int base)
strtol()会将nptr指向的字符串,根据参数base,按权转化为long int, 然后返回这个值。
参数base的范围为2~36,和0;它决定了字符串以被转换为整数的权值。
可以被转换的合法字符依据base而定,举例来说,当base为2时,合法字符为‘0’,‘1’;base为8时,合法字符为‘0’,‘1’,……‘7’;base为10时,合法字符为‘0’,‘1’,……‘9’;base 为16时,合法字符为‘0’,‘1’,……‘9’,‘a’,……‘f’;base为24时,合法字符为‘0’,……‘9’,‘a’,……‘n’,base为36时,合法字符为‘0’,……‘9’,‘a’,……‘z’;等等。其中,不区分大小写,比如,‘A’和‘a’会都会被转化为10。
当字符合法时,‘0’,……‘9’依次被转换为十进制的0~9,‘a’,……‘z’一次北转换为十进制的10~35。
strtol()函数检测到第一个非法字符时,立即停止检测,其后的所有字符都会被当作非法字符处理。合法字符串会被转换为long int, 作为函数的返回值。非法字符串,即从第一个非法字符的地址,被赋给*endptr。**endptr是个双重指针,即指针的指针。strtol()函数就是通过它改变*endptr的值,即把第一个非法字符的地址传给endptr。
多数情况下,endptr设置为NULL, 即不返回非法字符串。
建议打开看看这个博主的深入了解学习这个函数
我用#CSDN#这个app发现了有技术含量的博客,小伙伴们求同去《strtol()详解》, 一起来围观吧 https://blog.csdn.net/zxx2096/article/details/81127858?utm_source=app&app_version=4.21.0&code=app_1562916241&uLinkId=usr1mkqgl919blen