进制转换问题
如何用C++,把一个9进制的数转化为19进制的数啊(用a~i表示10~18)(小白,希望语句能够易懂一些,谢谢啦) #include <stdio.h>#include <string.h>
char * jiu2shijiu(char * shijiu , char * jiu)
{
int d , i , k , m ;
char b , s ;
for(k = 0 ; k < 10 ; k ++) s = '0' + k ;
for(k = 0 ; k <9 ; k ++) s = 'a' + k ;
for(m= strlen(jiu) , d = 0 , i = 0 ; i < m ; i ++) d = d * 9 + jiu - '0' ;
for(m = 0 ; d ; d /= 19 , m ++) b = s ;
for(k = 0 ; k < m ; k ++) shijiu = b ;
shijiu = '\0' ;
return shijiu ;
}
char * shijiu2jiu(char * jiu , char * shijiu)
{
int d , i , k , m ;
char b ;
for(m = strlen(shijiu) , d = 0 , i = 0 ; i < m ; i ++) {
if(shijiu > '9') d = d * 19 + shijiu - 'a' + 10 ;
else d = d * 19 + shijiu - '0' ;
}
for(m = 0 ; d ; d /= 9 , m ++) b = '0' + d % 9 ;
for(k = 0 ; k < m ; k ++) jiu = b ;
jiu = '\0' ;
return jiu ;
}
main(void)
{
char jiu , shijiu ;
strcpy(jiu , "88888888") ;
jiu2shijiu(shijiu , jiu) ;
printf("jiu = %s\tshijiu = %s\n" , jiu , shijiu) ;
shijiu2jiu(jiu , shijiu) ;
printf("jiu = %s\tshijiu = %s\n" , jiu , shijiu) ;
}
编译、运行实况:
C:\Bin>g++ -o jiu jiu.c
C:\Bin>jiu
jiu = 88888888shijiu = h75hig
jiu = 88888888shijiu = h75hig
C:\Bin> jackz007 发表于 2019-12-5 18:58
编译、运行实况:
麻烦问一下,那个66是随便设的是吧,还有那个shijiu的字符串没有初始化的话,传到函数中的应该是什么啊 66 不是随便设的,因为最长的整型数 long long 是 64 位,如果把一个 long long 类型的整型数转换成二进制,自然最多需要 64 个字符的存储空间,以便可以保存最长 64 个二进制字符,再加上字符串结束标志,那就是 65 个字符了,那么,65 + 1 就是 66 了。shijiu 是字符串形式的十九进制数,jiu 是字符串形式的九进制数。
两个函数都有两个输入参数,其中,第一个用来保存转换结果,第二个是字符串形式需要转换的九进制或十九进制数。 jackz007 发表于 2019-12-5 21:20
66 不是随便设的,因为最长的整型数 long long 是 64 位,如果把一个 long long 类型的整型数转换 ...
好的,懂了,谢谢啦 jackz007 发表于 2019-12-5 21:20
66 不是随便设的,因为最长的整型数 long long 是 64 位,如果把一个 long long 类型的整型数转换 ...
麻烦问一下,如果我从键盘上输入数字的话,是不需要把十进制转换为九进制,然后再化为十九进制数啊 本帖最后由 jackz007 于 2019-12-11 16:08 编辑
forever33221 发表于 2019-12-11 15:57
麻烦问一下,如果我从键盘上输入数字的话,是不需要把十进制转换为九进制,然后再化为十九进制数啊
从键盘读到的是字符串,比如,要求你从键盘上输入 4 位九进制数,你按了 4 下字符 '8',于是,字符串 "8888" 就会作为九进制数的输入 jiu[] 提交给函数 jiu2shijiu(),然后,作为响应,函数就会给出一个十九进制形式的字符串;十九进制数的输入与九进制的道理完全一样。 jackz007 发表于 2019-12-11 16:04
从键盘读到的是字符串,比如,要求你从键盘上输入 4 位九进制数,你按了 4 下字符 '8',于是,字 ...
奥,就是它是读取的输入数字字符的ASCII码值是吧,那为什么我们通常从键盘上输入的自动就是十进制的呢。 本帖最后由 jackz007 于 2019-12-11 16:16 编辑
forever33221 发表于 2019-12-11 16:11
奥,就是它是读取的输入数字字符的ASCII码值是吧,那为什么我们通常从键盘上输入的自动就是十进制的呢。
注意,从键盘上原始得到的一定是字符串,之所以是十进制数,那是因为中间有了像 scanf() 这样的函数,这些函数可以按照我们的要求,把字符串转换成 10 进制数。 jackz007 发表于 2019-12-11 16:14
注意,从键盘上原始得到的一定是字符串,之所以是十进制数,那是因为中间有了像 scanf() 这样 ...
哦,从键盘上输入的都是原始字符,只不过经过函数转译成我们常用的类型了是吧,那我也只能用scanf接收输入啊,它不会变成十进制吗,有点晕 本帖最后由 jackz007 于 2019-12-11 16:30 编辑
forever33221 发表于 2019-12-11 16:20
哦,从键盘上输入的都是原始字符,只不过经过函数转译成我们常用的类型了是吧,那我也只能用scanf接收输 ...
从键盘获取信息的途径有很多,下面的都是
scanf("%c" , & ch) ; # 从键盘读取单个字符
ch = getchar() ;# 从键盘读取单个字符
scanf("%s" , s) ;# 从键盘读取字符串
s = fgets(s , 1024 , stdin) ;# 从键盘读取最长不超过 1024 个字符的字符串
scanf("%d" , & v) ;# 按十进制从键盘接收整型数输入
scanf("%x" , & v) ;# 按十六进制从键盘接收整型数输入
scanf("%o" , & v) ;# 按八进制从键盘接收整型数输入
scanf("%f" , & v) ;# 从键盘读取浮点数输入
scanf("%lf" , & v) ;# 从键盘读取双精度浮点数输入
关键是,你必须清楚,你将要获得的信息是什么,是别人按十进制、九进制还是十九进制输入给你的等等。
jackz007 发表于 2019-12-11 16:26
scanf("%c" , & ch) ; # 从键盘读取单个字符
ch = getchar() ;# 从键盘读取单个字符
scanf("%s" , ...
了解啦,十分感谢
页:
[1]