用字母表示数字(相当于10进制转换成26进制),中26即Z的转换控制

alex_cjh 2011-10-18 10:41:54
CString numbertoletter(int index,CString serialvalue)
{
int prefix=index/26;
int postfix=index%26;
CString bbb;
if (prefix<26)
{
CString aaa;
aaa.Format("%c",prefix+64);
serialvalue+=aaa;
}
else if(prefix>=26)
{

serialvalue+=numbertoletter(prefix,serialvalue);

}
else if(prefix==0)
{
}

if(postfix!=0)
{
bbb.Format("%c",postfix+64);
serialvalue+=bbb;
}
else if(postfix==0)
{
bbb.Format("%c",90);
serialvalue+=bbb;
}
return serialvalue;
}
中26即Z的转换控制搞得我有点头晕,有谁能指点我一下吗
或者有没有不用递归的方法?
...全文
832 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
alex_cjh 2011-10-21
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 alex_cjh 的回复:]

引用 15 楼 hellowithsmile 的回复:

0 = a
1 = b
2 = c
...
25 = z
怎么可能是26 = z?

这就是跟单纯进制转换不同的地方
比如十进制9然后到10
而用字母的话Z后到AA而不是BA
[/Quote]
另外,计划中是想达到1=a 2=b 26=z
27=aa 52=bz的效果
我又发现了26*26并不是zz 而应该是YZ...
alex_cjh 2011-10-21
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 hellowithsmile 的回复:]

0 = a
1 = b
2 = c
...
25 = z
怎么可能是26 = z?
[/Quote]
这就是跟单纯进制转换不同的地方
比如十进制9然后到10
而用字母的话Z后到AA而不是BA
alex_cjh 2011-10-21
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 xibeitianlang 的回复:]

引用 6 楼 alex_cjh 的回复:
找到办法了
do
{



postfix=index%26;

index/=26;

if(postfix==0)
{
postfix=26;
index--;
}


bbb.Format("%c",65+(postfix+25)%26);
serialvalu=bbb+serialvalu;

}
wh……
[/Quote]
这样子26的倍数还是有问题
例如52应该是AZ 但你输出的结果是BZ

上面的算法在遇到26的倍数或者26*26是都会有一点问题...

hz张三 2011-10-20
  • 打赏
  • 举报
回复
0 = a
1 = b
2 = c
...
25 = z
怎么可能是26 = z?
深度抽象 2011-10-20
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 wwwzys 的回复:]

void transf(int a,int radix,int &n,char *ans)//a: 要转化的整数,radix:转换的进制,n:转换后得到的位数,ans为结果
{
n=0;
while(a)
{
ans[n++]=("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[a % radix]);
a = a / radi……
[/Quote]

等级低,不代表水平低!!楼主你用一下!
深度抽象 2011-10-20
  • 打赏
  • 举报
回复
void transf(int a,int radix,int &n,char *ans)//a: 要转化的整数,radix:转换的进制,n:转换后得到的位数,ans为结果
{
n=0;
while(a)
{
ans[n++]=("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[a % radix]);
a = a / radix;
}
for(int i=0;i<n/2;i++)
{
swap(ans[i],ans[n-i-1]);
}
ans[n]='\0';
}
深度抽象 2011-10-20
  • 打赏
  • 举报
回复
楼主没看到我的函数吗???


void transf(int a,int radix,int &n,char *ans)//a: 要转化的整数,radix:转换的进制,n:转换后得到的位数,ans为结果
{
n=0;
while(a)
{
ans[n++]=("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[a % radix]);
a = a / radix;
}
for(int i=0;i<n/2;i++)
{
swap(ans[i],ans[n-i-1]);
}
ans[n]='\0';
}
cnmhx 2011-10-20
  • 打赏
  • 举报
回复
有现成的标准库代码吧?
cnmhx 2011-10-20
  • 打赏
  • 举报
回复
有现成的标准库代码吧?
cnmhx 2011-10-20
  • 打赏
  • 举报
回复
这个难道没有现成的库,或者标准的程序代码?
alex_cjh 2011-10-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xibeitianlang 的回复:]
还是不对,蛋不定。
do
{
postfix=index%26;
bbb.Format("%c",65+(postfix+25)%26);
serialvalue+=bbb;
index/=26;
} while(index>0);
[/Quote]
还是那个老问题啊
26的时候index/=26 index=1 还是大于0 仍然会对执行一次啊。
alex_cjh 2011-10-19
  • 打赏
  • 举报
回复
谢谢你拉,看到前面的我正奇怪终止条件怎么不对呢~~
[Quote=引用 3 楼 xibeitianlang 的回复:]
还是不对,蛋不定。
do
{
postfix=index%26;
bbb.Format("%c",65+(postfix+25)%26);
serialvalue+=bbb;
index/=26;
} while(index>0);
[/Quote]
深度抽象 2011-10-19
  • 打赏
  • 举报
回复
void transf(int a,int radix,int &n,char *ans)//a: 要转化的整数,radix:转换的进制,n:转换后得到的位数,ans为结果
{
n=0;
while(a)
{
ans[n++]=("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[a % radix]);
a = a / radix;
}
for(int i=0;i<n/2;i++)
{
swap(ans[i],ans[n-i-1]);
}
ans[n]='\0';
}
xibeitianlang 2011-10-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 alex_cjh 的回复:]
找到办法了
do
{



postfix=index%26;

index/=26;

if(postfix==0)
{
postfix=26;
index--;
}


bbb.Format("%c",65+(postfix+25)%26);
serialvalu=bbb+serialvalu;

}
while(index>0);
[/Quote]
从0开始,不需要if
int postfix=index-1;
do
{
bbb.Format("%c",65+postfix%26);
serialvalu=bbb+serialvalu;
postfix/=26;
} while(postfix>0);
alex_cjh 2011-10-19
  • 打赏
  • 举报
回复
找到办法了
do
{



postfix=index%26;

index/=26;

if(postfix==0)
{
postfix=26;
index--;
}


bbb.Format("%c",65+(postfix+25)%26);
serialvalu=bbb+serialvalu;

}
while(index>0);
xibeitianlang 2011-10-18
  • 打赏
  • 举报
回复
还是不对,蛋不定。
do
{
postfix=index%26;
bbb.Format("%c",65+(postfix+25)%26);
serialvalue+=bbb;
index/=26;
} while(index>0);
xibeitianlang 2011-10-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xibeitianlang 的回复:]
for(;index>25;index/=26)
{
postfix=index%26;
bbb.Format("%c",65+(postfix+25)%26);
serialvalue+=bbb;
}
[/Quote]
不能用for应该用do{}while(index>25)
xibeitianlang 2011-10-18
  • 打赏
  • 举报
回复
for(;index>25;index/=26)
{
postfix=index%26;
bbb.Format("%c",65+(postfix+25)%26);
serialvalue+=bbb;
}

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧