扩展Excel表列序号为1,2,……的列代码依次为A,B,C,……,Y,Z;AA,AB,……,AZ;BA,BB,……,AZ;BA,BB,……,BZ;……;ZA,ZB,……,ZZ;AAA,……;
试进行列序号与列代码的相互转换;
输入列序号(不超过15位整数)或列代码(不超过10个大写字母),输出对应的列代码或对应的列序号;
例如,输入列序号28,输出对应的列代码AB;输入列代码BA,输出对应的列序号53;
1.说明:
设置3个数组:字符串数组b存储输入的列序号与列代码,整型数组a存储把b串中的每一个字符转换为整数,整型数组p存储把序号s通过“除26取余”的各位余数;
(1)、以字符串方式输入代码或序号,并把各字符转换为数字存储在a数组中,检测若输入的字符不是数字或大写字母时退出;
(2)、一个数字(如a[1])若非数字,则实施代码转换为代码;否则,实施序号转换为代码;
(3)、代码转换为序号: 应用a[k]-16把一个代码转换为数字(如A~1,B~2,……),然后在k循环中通过s=(s+a[k])*26转换,整数s即代码的序号;
(4)、序号转换为代码:首先把各数字a[k]应用s=(s+s[k])*10转换为十进制整数s;然后通过“除26取余”把s转换为26进制数,从低位开始为p[1],p[2],……(若p[m]=0,则p[m]=26;,相应的被除数x=x-1;),最后从高位到低位以字符方式输出p[k],即为所求的列代码;
2.程序设计:
#include<stdio.h>
#include<math.h>
int main()
{
int k,m,a[20],p[20];
double s,x;
char b[20];
printf("请输入列序号或列代码:");
scanf("%s",b); /*以字符串方式输入代码或序号*/
for(m=0,k=0;b[k]!='\0';k++)
{
m++;