十进制转换为(2-10)进制代码方法
#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]);
}
}
1173 十进制转换成n进制
输入要求:输入两个整数num和n,num表示要转换的数,n表示要转换成的进制。如10 2表示要求将十进制数10转换成二进制数。(2<=n<17)
输出要求:输出转化后的进制数,每个数字之后跟一空格,如果数字大于9,则输出大写英文字母(10-16分别对应A-F)。
输入样例 32685 13
输出样例 1 1 B 5 3 (注意看,输出每个数字间是有空格的,)
#include<stdio.h>
int main()
{
int a,b,i,count=0;
char arr[100];
scanf("%d",&a);
scanf("%d",&b);
do{
arr[count]=a%b;
a=a/b;
++count;
}while(a!=0);
for(i=count-1;i>=0;i--)
{
if(arr[i]>9)
{
printf("%c ",arr[i]-10+'A');//这里解释一下arr[]数组里存储的是ASCII,
//比如说第一位arr[0]存储的是13这个数字对应的ASCII值,计算机内部存在自动转换,
//arr[i]-10+'A'通过这个操作可以实现(2-36)进制的转换
}
else
printf("%d ",arr[i]);
}
printf("\n");
}
任意(2-10)进制数转换为十进制
#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++通过调用bitset函数将十进制数转换为二进制
#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>
}
以下函数,_itoa函数能将任意十进制数转换为任意进制的数字
#include <iostream>
#include <algorithm>//需要调用这个头文件
using namespace std;
int main()
{
// 将10进制数转换为任意的n进制数,结果为char型。
int num = 233;
char buffer[100]; //例如,将十进制的数字233转换为8进制的数字 351
_itoa(num, buffer, 8); //c++中一般用_itoa,用itoa也行,
cout << buffer;
}
以下这个函数是能将2至36进制字符串转换为10进制的函数(c++)strtol函数
#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