user-0 提问: acm的一个题关于序号互换

回复:
user: user-1
content: 26进制的问题 利用itoa(number, string, 26); 和strtol(string, &stopstring, 26); 自己再处理下就可以解决了

user: user-2
content: 引用 2 楼 u012878380 的回复:[quote=引用 1 楼 my_live_123 的回复:]  #include <stdio.h> #include <stdlib.h>   #define MAX_DEEP 32 void function(int num) { 	char *alpha ="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 	char array[MAX_DEEP] = {0}; 	int top = -1;  	num--; 	do{ 		if(top + 1 >= MAX_DEEP) 			break; 		array[++top] = alpha[num % 26]; 		num /= 26; 	}while(num);  	while(top >= 0) { 		printf("%c", array[top]); 		--top; 	} }  int main(int argc, char *argv[]) { 	int i; 	 	for(i = 1; i < 100; ++i) { 		printf("%d = ", i); 		function(i); 		printf("\n"); 	}  	exit(0); } 怎末理解的啊  能否给定思路[/quote]  和十进制转换二进制一样的道理，只不过这里是十进制转26进制

user: user-3
content: //Input a string : AA //AA = 27 //Input a num : 27 //27 = AA //Input a string : ABC //ABC = 731 //Input a num : 731 //731 = ABC //Input a string : Ctrl + c

user: user-3
content: 仅供参考：  #include <stdio.h> #include <stdlib.h> unsigned int StrToU(char *s, int n) { 	if (s == NULL || n < 0) 		return 0; 	unsigned int res = 0; 	int i, radix = 1; 	for (i = n - 1; i >= 0; i--) 	{ 		if (i < n - 1) 			radix *= 26; 		res += (s[i] - 'A' + 1)*radix; 	} 	return res; } char *UToStr(char *dest, unsigned int n) { 	char buf[10]; 	int i, pos = 9; 	while (n) 	{ 		i = n % 26; 		buf[pos--] = i - 1 + 'A'; 		n /= 26; 	} 	strncpy(dest, buf + pos + 1, 10 - pos); 	dest[9 - pos] = 0; 	return dest; } int main(void)//11 { 	char str[10]; 	unsigned int n; 	char dest[10]; 	while (1) 	{ 		memset(str, 0, 10); 		memset(dest, 0, 10); 		printf("Input a string : "); 		if (1 == scanf("%s", str)) 			printf("%s=%u\n", str, StrToU(str, strlen(str))); 		else break; 		printf("Input a num : "); 		if (1 == scanf("%d", &n)) 			printf("%u=%s\n", n, UToStr(dest, n)); 		else break; 	} 	return 0; }

user: user-4
content: 对于单个字母：A-Z对应1-26。 对于两个字母：第一个字母的值乘以26加第二个字母的值 比如：AA：26*1+1，ZZ:26*26+26 对于N个字母，值为26^(N-1)*第一个字母+26^(N-2)*第二个字母+...+第N个字母 反过来，通过数字求字母，设数字为n,则(n-1)%26+1为最后一个字母的值。前面的字母可用递归求得。 代码如下：  #include<stdio.h> void kong(int n) {     if(n>26)         kong((n-1)/26);     putchar((n-1)%26+'A'); } int main() {     int n;     scanf("%d",&n);     kong(n);     putchar('\n');     return 0; }

user: user-0
content: 引用 1 楼 my_live_123 的回复: #include <stdio.h> #include <stdlib.h>   #define MAX_DEEP 32 void function(int num) { 	char *alpha ="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 	char array[MAX_DEEP] = {0}; 	int top = -1;  	num--; 	do{ 		if(top + 1 >= MAX_DEEP) 			break; 		array[++top] = alpha[num % 26]; 		num /= 26; 	}while(num);  	while(top >= 0) { 		printf("%c", array[top]); 		--top; 	} }  int main(int argc, char *argv[]) { 	int i; 	 	for(i = 1; i < 100; ++i) { 		printf("%d = ", i); 		function(i); 		printf("\n"); 	}  	exit(0); } 怎末理解的啊  能否给定思路

user: user-2
content: #include <stdio.h> #include <stdlib.h>   #define MAX_DEEP 32 void function(int num) { 	char *alpha ="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 	char array[MAX_DEEP] = {0}; 	int top = -1;  	num--; 	do{ 		if(top + 1 >= MAX_DEEP) 			break; 		array[++top] = alpha[num % 26]; 		num /= 26; 	}while(num);  	while(top >= 0) { 		printf("%c", array[top]); 		--top; 	} }  int main(int argc, char *argv[]) { 	int i; 	 	for(i = 1; i < 100; ++i) { 		printf("%d = ", i); 		function(i); 		printf("\n"); 	}  	exit(0); }