user-0 提问: 编程实现10进制转27进制

回复:
user: user-0
content: 引用 1 楼 user-7 的回复:没明白你所谓的27进制到底是什么意思，27位分别是什么？ 引用 3 楼 xiaohuh421 的回复:这都是因为你没有表示0的数 引用 4 楼 majia2011 的回复:没有0？怎么表示27？  这设计本身就错了 引用 6 楼 PDD123 的回复:没有表示0的数的话，你不可能算对的。  。可能是我表达不清楚吧。看8楼：    引用 8 楼 dbzhang800 的回复:比如Excel的列，就是用 A~Z 这样的26进制表示的（只要不和其他进制不转换，就和其他其他进制的符号没任何关系，和0也没有任何关系，它本身最小的数就是 A）。  A B C D ....  你可以想象，如何把它转成10进制数呢？这就需要有个对应关系了：  0 1 2 3 ... 1000 ...  还是  1 2 3 4 ...  1001 ...  两种方式都有人在用。  就是表格里的列~

user: user-1
content: _ltoa, _ltow Convert a long integer to a string.  char *_ltoa( long value, char *string, int radix );  wchar_t *_ltow( long value, wchar_t *string, int radix );  Routine Required Header Compatibility  _ltoa <stdlib.h> Win 95, Win NT  _ltow <stdlib.h> Win 95, Win NT    For additional compatibility information, see Compatibility in the Introduction.  Libraries  LIBC.LIB Single thread static library, retail version  LIBCMT.LIB Multithread static library, retail version  MSVCRT.LIB Import library for MSVCRT.DLL, retail version    Return Value  Each of these functions returns a pointer to string. There is no error return.  Parameters  value  Number to be converted  string  String result  radix  Base of value  Remarks  The _ltoa function converts the digits of value to a null-terminated character string and stores the result (up to 33 bytes) in string. The radix argument specifies the base of value, which must be in the range 2 – 36. If radix equals 10 and value is negative, the first character of the stored string is the minus sign (–). _ltow is a wide-character version of _ltoa; the second argument and return value of _ltow are wide-character strings. Each of these functions is Microsoft-specific.  Generic-Text Routine Mappings  TCHAR.H Routine  _UNICODE & _MBCS Not Defined _MBCS Defined _UNICODE Defined  _ltot _ltoa _ltoa _ltow    Example  /* ITOA.C: This program converts integers of various  * sizes to strings in various radixes.  */  #include <stdlib.h> #include <stdio.h>  void main( void ) {    char buffer[20];    int  i = 3445;    long l = -344115L;    unsigned long ul = 1234567890UL;     _itoa( i, buffer, 10 );    printf( "String of integer %d (radix 10): %s\n", i, buffer );    _itoa( i, buffer, 16 );    printf( "String of integer %d (radix 16): 0x%s\n", i, buffer );    _itoa( i, buffer, 2  );    printf( "String of integer %d (radix 2): %s\n", i, buffer );     _ltoa( l, buffer, 16 );    printf( "String of long int %ld (radix 16): 0x%s\n", l,                                                      buffer );     _ultoa( ul, buffer, 16 );    printf( "String of unsigned long %lu (radix 16): 0x%s\n", ul,                                                     buffer ); }   Output  String of integer 3445 (radix 10): 3445 String of integer 3445 (radix 16): 0xd75 String of integer 3445 (radix 2): 110101110101 String of long int -344115 (radix 16): 0xfffabfcd String of unsigned long 1234567890 (radix 16): 0x499602d2   Data Conversion Routines  See Also   _itoa, _ultoa

user: user-2
content: 比如Excel的列，就是用 A~Z 这样的26进制表示的（只要不和其他进制不转换，就和其他其他进制的符号没任何关系，和0也没有任何关系，它本身最小的数就是 A）。  A B C D ....  你可以想象，如何把它转成10进制数呢？这就需要有个对应关系了：  0 1 2 3 ... 1000 ...  还是  1 2 3 4 ...  1001 ...  两种方式都有人在用。

user: user-2
content: ”常规整数“ ==> "楼主26进制" ： 先减 1， 而后常规变换。   ”楼主26进制“ ==> "常规整数"： 先常规变换，而后加 1

user: user-3
content: 没有表示0的数的话，你不可能算对的。

user: user-2
content: 楼主自己想复杂了，这就是一个"标准的" 26 进制数： A~Z  无非是，”和其他数制转换时“，习惯上我们以0开始，他这儿以 1开始罢了。

user: user-4
content: 没有0？怎么表示27？  这设计本身就错了

user: user-5
content: 这都是因为你没有表示0的数

user: user-6
content: 因为你后面还加了一个'A'，‘A'代表1，后面加1了，前面当然要减1，换种思路，把10进制转换成10进制（A表示1，B表示2...I表示9），就比较好理解了 num[k++] = (sum - 1) % 10 + 'A'; sum = (sum - 1) / 10;

user: user-7
content: 没明白你所谓的27进制到底是什么意思，27位分别是什么？

user: user-5
content: (sum - 1) % 26 + 'A' 如果不减1 公式就是这样的  sum%26 + 'A'  这时你想表达'Z' 即26.  这时你输入 26  那么就有  26%26 +'A'  = 'A'  这就不符合你的要求了.  减1就变成:   (26-1)%26+'A' = 25%26+'A' = 'Z' 刚好是你所想要的结果.  其它数据也是一样, 你自己算一下就知道了.     归根结底都是因为你的进制中没有表示0的数. A-Z  26个字母表示26进制, 取值范围也应该是 0-25, 而不应该是 1-26, 所以8楼说的是错的,  楼主你的进制也是错误的.  就像10进制也样, 你看到10进制中有10表示一位吗?  没有吧.  只能是0-9.  0是一个伟大的发明, 不能舍弃它.

user: user-5
content: 所以你问的(sum - 1)为什么减1, 答案就已经有了撒,  本来正常的26进制应该是0对应A的.  因为你"26"进制中没有可以表示0的字符, 从1开始的, 所以只好减1, 让其能从0开始. 即 让1对应A.