找回密码
 欢迎注册
楼主: chyanog

[求助] 写一个函数,输入0打印A,1打印B,...,26打印AA,27打印AB........

[复制链接]
发表于 2011-12-8 16:50:07 | 显示全部楼层
有点长:
  1. f = FromCharacterCode[ PadLeft[IntegerDigits[# - (26 (26^Floor[Log[26, 25 #/26 + 1]] - 1))/25, 26], Floor[Log[26, 25 #/26 + 1]] + 1] + 65] &
复制代码
反函数:
  1. g = FromDigits[ToCharacterCode[#] - 65, 26] + ( 26 (26^(StringLength[#] - 1) - 1))/25 &
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-12-8 17:00:43 | 显示全部楼层
14# 风云剑 正确! {10, "K"} {100, "CW"} {1000, "ALM"} {10000, "NTQ"} {100000, "EQXE"} {1000000, "BDWGO"} {10000000, "UVXWK"} {100000000, "HJUNYW"} {1000000000, "CFDGSXM"} {10000000000, "AFIPYQJQ"} {100000000000, "LKRMVRBE"} {1000000000000, "DTMCHRXUO"} {10000000000000, "AUWAGIGNGK"} {100000000000000, "RJVLUNWLUW"} {1000000000000000, "GBDPXGRZXJM"} {10000000000000000, "BRUTMHYHIIZQ"} {100000000000000000, "AAFIWCKSEOVFE"} {1000000000000000000, "JLKTWHMJDBNIO"} {10000000000000000000, "CZTMZYGCWNYMQK"} {100000000000000000000, "ANGWJIRSMASUFQW"}
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-12-8 17:12:21 | 显示全部楼层
const s: String = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; function AZ(const N: Integer): string; var i: Integer; begin Result:=''; i:=N+1; while i>0 do begin Result:=s[(i-1) mod 26+1]+Result; i:=(i-1) div 26; end; end;
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-12-8 18:29:25 | 显示全部楼层
一个字母的有26个,两个字母的$26^2$个,... 所以字母总数不超过k个的情况共$26+26^2+...+26^k={26^{k+1}-1}/25-1={26^{k+1}}/25-1/25-1=[{26^{k+1}}/25-1]$ 于是对于任意一个数x,如果要找对应的位数,那么就相当于找k是的 ${26^k}/25-1
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-12-8 18:37:13 | 显示全部楼层
比如取x=1000,马上算出对应k=3,由于前面两位数数目是[{26^3}/25-1]=702 然后计算1000-702=298,将298转化为3位26进制数得出(0,11,12),于是结果是ALM
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-12-8 20:21:51 | 显示全部楼层
我的算法是直接递推,当除以26的商=0时结束: $ 1000=((d_3+1)*26+(d_2+1))*26+d_1 $ $ d_1=1000 mod 26 = 12 $ $ d_2= ([1000/26]-1) mod 26 = 11 $ $ d_3= ([([1000/26]-1)/26]-1) mod 26 =0 $ $ 1000=ALM $
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-11-23 09:52 , Processed in 0.029504 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表