class Numeric def sjz(y) # 把y(1-9)进制数转换为10进制数 num=0 i=1 r=self%10 s=self sn=[] x=0 self_array = self.to_s.scan(/./) # 分割每一位上的数字 for char in self_array # 获取位数 sn[x]=char.to_i x+=1 end until i>x num+=r*y**(i-1) s=(s-r)/10 r=s%10 i+=1 end return num.truncate == num ? num.truncate : num end def njz(y) # 把10进制数转换为y(1-9)进制数 num=0 i=1 q=0 r=self%y q=(self-r)/y num+=r until q==0 r=q%y q=(q-r)/y num+=r*10**i i+=1 end return num.truncate == num ? num.truncate : num end end
def snjz(y) # 把10进制数转换为16进制数(必须用print,否则会p num => nil) s=[] if self==16 s[0]=4 s[1]=2 elsif self==25 s[0]=5 s[1]=2 elsif self==27 s[0]=3 s[1]=3 elsif self==32 s[0]=2 s[1]=5 elsif self==36 s[0]=6 s[1]=2 end n=[] m=[] num="" i=1 q=0 r=y%s[0] q=(y-r)/s[0] n[0]=r until q==0 r=q%s[0] q=(q-r)/s[0] n[i]=r i+=1 end ns=n.size nsr=ns%s[1] for i in 1..s[1]-nsr n[ns+i-1]=0 end ns=n.size nsr=ns/s[1] for i in 1..nsr if s[1]==2 m[i-1]=n[1+2*(i-1)].to_s+n[2*(i-1)].to_s elsif s[1]==3 m[i-1]=n[2+3*(i-1)].to_s+n[1+3*(i-1)].to_s+n[3*(i-1)].to_s elsif s[1]==5 m[i-1]=n[4+5*(i-1)].to_s+n[3+5*(i-1)].to_s+n[2+5*(i-1)].to_s+ n[1+5*(i-1)].to_s+n[5*(i-1)].to_s end end for i in 0...m.size if self==16 m[i]="0" if m[i]=="00" m[i]="1" if m[i]=="01" m[i]="2" if m[i]=="02" m[i]="3" if m[i]=="03" m[i]="4" if m[i]=="10" m[i]="5" if m[i]=="11" m[i]="6" if m[i]=="12" m[i]="7" if m[i]=="13" m[i]="8" if m[i]=="20" m[i]="9" if m[i]=="21" m[i]="A" if m[i]=="22" m[i]="B" if m[i]=="23" m[i]="C" if m[i]=="30" m[i]="D" if m[i]=="31" m[i]="E" if m[i]=="32" m[i]="F" if m[i]=="33" elsif self==25 m[i]="0" if m[i]=="00" m[i]="1" if m[i]=="01" m[i]="2" if m[i]=="02" m[i]="3" if m[i]=="03" m[i]="4" if m[i]=="04" m[i]="5" if m[i]=="10" m[i]="6" if m[i]=="11" m[i]="7" if m[i]=="12" m[i]="8" if m[i]=="13" m[i]="9" if m[i]=="14" m[i]="A" if m[i]=="20" m[i]="B" if m[i]=="21" m[i]="C" if m[i]=="22" m[i]="D" if m[i]=="23" m[i]="E" if m[i]=="24" m[i]="F" if m[i]=="30" m[i]="G" if m[i]=="31" m[i]="H" if m[i]=="32" m[i]="I" if m[i]=="33" m[i]="J" if m[i]=="34" m[i]="K" if m[i]=="40" m[i]="L" if m[i]=="41" m[i]="M" if m[i]=="42" m[i]="N" if m[i]=="43" m[i]="O" if m[i]=="44" elsif self==27 m[i]="0" if m[i]=="000" m[i]="1" if m[i]=="001" m[i]="2" if m[i]=="002" m[i]="3" if m[i]=="010" m[i]="4" if m[i]=="011" m[i]="5" if m[i]=="012" m[i]="6" if m[i]=="020" m[i]="7" if m[i]=="021" m[i]="8" if m[i]=="022" m[i]="9" if m[i]=="100" m[i]="A" if m[i]=="101" m[i]="B" if m[i]=="102" m[i]="C" if m[i]=="110" m[i]="D" if m[i]=="111" m[i]="E" if m[i]=="112" m[i]="F" if m[i]=="120" m[i]="G" if m[i]=="121" m[i]="H" if m[i]=="122" m[i]="I" if m[i]=="200" m[i]="J" if m[i]=="201" m[i]="K" if m[i]=="202" m[i]="L" if m[i]=="210" m[i]="M" if m[i]=="211" m[i]="N" if m[i]=="212" m[i]="O" if m[i]=="220" m[i]="P" if m[i]=="221" m[i]="Q" if m[i]=="222" elsif self==32 m[i]="0" if m[i]=="00000" m[i]="1" if m[i]=="00001" m[i]="2" if m[i]=="00010" m[i]="3" if m[i]=="00011" m[i]="4" if m[i]=="00100" m[i]="5" if m[i]=="00101" m[i]="6" if m[i]=="00110" m[i]="7" if m[i]=="00111" m[i]="8" if m[i]=="01000" m[i]="9" if m[i]=="01001" m[i]="A" if m[i]=="01010" m[i]="B" if m[i]=="01011" m[i]="C" if m[i]=="01100" m[i]="D" if m[i]=="01101" m[i]="E" if m[i]=="01110" m[i]="F" if m[i]=="01111" m[i]="G" if m[i]=="10000" m[i]="H" if m[i]=="10001" m[i]="I" if m[i]=="10010" m[i]="J" if m[i]=="10011" m[i]="K" if m[i]=="10100" m[i]="L" if m[i]=="10101" m[i]="M" if m[i]=="10110" m[i]="N" if m[i]=="10111" m[i]="O" if m[i]=="11000" m[i]="P" if m[i]=="11001" m[i]="Q" if m[i]=="11010" m[i]="R" if m[i]=="11011" m[i]="S" if m[i]=="11100" m[i]="T" if m[i]=="11101" m[i]="U" if m[i]=="11110" m[i]="V" if m[i]=="11111" elsif self==36 m[i]="0" if m[i]=="00" m[i]="1" if m[i]=="01" m[i]="2" if m[i]=="02" m[i]="3" if m[i]=="03" m[i]="4" if m[i]=="04" m[i]="5" if m[i]=="05" m[i]="6" if m[i]=="10" m[i]="7" if m[i]=="11" m[i]="8" if m[i]=="12" m[i]="9" if m[i]=="13" m[i]="A" if m[i]=="14" m[i]="B" if m[i]=="15" m[i]="C" if m[i]=="20" m[i]="D" if m[i]=="21" m[i]="E" if m[i]=="22" m[i]="F" if m[i]=="23" m[i]="G" if m[i]=="24" m[i]="H" if m[i]=="25" m[i]="I" if m[i]=="30" m[i]="J" if m[i]=="31" m[i]="K" if m[i]=="32" m[i]="L" if m[i]=="33" m[i]="M" if m[i]=="34" m[i]="N" if m[i]=="35" m[i]="O" if m[i]=="40" m[i]="P" if m[i]=="41" m[i]="Q" if m[i]=="42" m[i]="R" if m[i]=="43" m[i]="S" if m[i]=="44" m[i]="T" if m[i]=="45" m[i]="U" if m[i]=="50" m[i]="V" if m[i]=="51" m[i]="W" if m[i]=="52" m[i]="X" if m[i]=="53" m[i]="Y" if m[i]=="54" m[i]="Z" if m[i]=="55" end end for i in 0..m.size if m[m.size-i]==m[m.size-1] if m[m.size-i]!="0" num=num.to_s+m[m.size-i].to_s end else num=num.to_s+m[m.size-i].to_s end end return num.to_s == num ? num.to_s : num end
def nsjz(y) # 把16/25/27/32/36进制数转换为10进制数 num=0 sn=[] x=0 n=self.to_i s=y.to_s self_array = y.to_s.scan(/./) # 分割每一位上的数字 for char in self_array # 获取位数 sn[x]=char.to_s if n==16 sn[x]="00" if sn[x]=="0" sn[x]="01" if sn[x]=="1" sn[x]="02" if sn[x]=="2" sn[x]="03" if sn[x]=="3" sn[x]="10" if sn[x]=="4" sn[x]="11" if sn[x]=="5" sn[x]="12" if sn[x]=="6" sn[x]="13" if sn[x]=="7" sn[x]="20" if sn[x]=="8" sn[x]="21" if sn[x]=="9" sn[x]="22" if sn[x]=="A" sn[x]="23" if sn[x]=="B" sn[x]="30" if sn[x]=="C" sn[x]="31" if sn[x]=="D" sn[x]="32" if sn[x]=="E" sn[x]="33" if sn[x]=="F" elsif n==25 sn[x]="00" if sn[x]=="0" sn[x]="01" if sn[x]=="1" sn[x]="02" if sn[x]=="2" sn[x]="03" if sn[x]=="3" sn[x]="04" if sn[x]=="4" sn[x]="10" if sn[x]=="5" sn[x]="11" if sn[x]=="6" sn[x]="12" if sn[x]=="7" sn[x]="13" if sn[x]=="8" sn[x]="14" if sn[x]=="9" sn[x]="20" if sn[x]=="A" sn[x]="21" if sn[x]=="B" sn[x]="22" if sn[x]=="C" sn[x]="23" if sn[x]=="D" sn[x]="24" if sn[x]=="E" sn[x]="30" if sn[x]=="F" sn[x]="31" if sn[x]=="G" sn[x]="32" if sn[x]=="H" sn[x]="33" if sn[x]=="I" sn[x]="34" if sn[x]=="J" sn[x]="40" if sn[x]=="K" sn[x]="41" if sn[x]=="L" sn[x]="42" if sn[x]=="M" sn[x]="43" if sn[x]=="N" sn[x]="44" if sn[x]=="O" elsif n==27 sn[x]="000" if sn[x]=="0" sn[x]="001" if sn[x]=="1" sn[x]="002" if sn[x]=="2" sn[x]="010" if sn[x]=="3" sn[x]="011" if sn[x]=="4" sn[x]="012" if sn[x]=="5" sn[x]="020" if sn[x]=="6" sn[x]="021" if sn[x]=="7" sn[x]="022" if sn[x]=="8" sn[x]="100" if sn[x]=="9" sn[x]="101" if sn[x]=="A" sn[x]="102" if sn[x]=="B" sn[x]="110" if sn[x]=="C" sn[x]="111" if sn[x]=="D" sn[x]="112" if sn[x]=="E" sn[x]="120" if sn[x]=="F" sn[x]="121" if sn[x]=="G" sn[x]="122" if sn[x]=="H" sn[x]="200" if sn[x]=="I" sn[x]="201" if sn[x]=="J" sn[x]="202" if sn[x]=="K" sn[x]="210" if sn[x]=="L" sn[x]="211" if sn[x]=="M" sn[x]="212" if sn[x]=="N" sn[x]="220" if sn[x]=="O" sn[x]="221" if sn[x]=="P" sn[x]="222" if sn[x]=="Q" elsif n==32 sn[x]="00000" if sn[x]=="0" sn[x]="00001" if sn[x]=="1" sn[x]="00010" if sn[x]=="2" sn[x]="00011" if sn[x]=="3" sn[x]="00100" if sn[x]=="4" sn[x]="00101" if sn[x]=="5" sn[x]="00110" if sn[x]=="6" sn[x]="00111" if sn[x]=="7" sn[x]="01000" if sn[x]=="8" sn[x]="01001" if sn[x]=="9" sn[x]="01010" if sn[x]=="A" sn[x]="01011" if sn[x]=="B" sn[x]="01100" if sn[x]=="C" sn[x]="01101" if sn[x]=="D" sn[x]="01110" if sn[x]=="E" sn[x]="01111" if sn[x]=="F" sn[x]="10000" if sn[x]=="G" sn[x]="10001" if sn[x]=="H" sn[x]="10010" if sn[x]=="I" sn[x]="10011" if sn[x]=="J" sn[x]="10100" if sn[x]=="K" sn[x]="10101" if sn[x]=="L" sn[x]="10110" if sn[x]=="M" sn[x]="10111" if sn[x]=="N" sn[x]="11000" if sn[x]=="O" sn[x]="11001" if sn[x]=="P" sn[x]="11010" if sn[x]=="Q" sn[x]="11011" if sn[x]=="R" sn[x]="11100" if sn[x]=="S" sn[x]="11101" if sn[x]=="T" sn[x]="11110" if sn[x]=="U" sn[x]="11111" if sn[x]=="V" elsif n==36 sn[x]="00" if sn[x]=="0" sn[x]="01" if sn[x]=="1" sn[x]="02" if sn[x]=="2" sn[x]="03" if sn[x]=="3" sn[x]="04" if sn[x]=="4" sn[x]="05" if sn[x]=="5" sn[x]="10" if sn[x]=="6" sn[x]="11" if sn[x]=="7" sn[x]="12" if sn[x]=="8" sn[x]="13" if sn[x]=="9" sn[x]="14" if sn[x]=="A" sn[x]="15" if sn[x]=="B" sn[x]="20" if sn[x]=="C" sn[x]="21" if sn[x]=="D" sn[x]="22" if sn[x]=="E" sn[x]="23" if sn[x]=="F" sn[x]="24" if sn[x]=="G" sn[x]="25" if sn[x]=="H" sn[x]="30" if sn[x]=="I" sn[x]="31" if sn[x]=="J" sn[x]="32" if sn[x]=="K" sn[x]="33" if sn[x]=="L" sn[x]="34" if sn[x]=="M" sn[x]="35" if sn[x]=="N" sn[x]="40" if sn[x]=="O" sn[x]="41" if sn[x]=="P" sn[x]="42" if sn[x]=="Q" sn[x]="43" if sn[x]=="R" sn[x]="44" if sn[x]=="S" sn[x]="45" if sn[x]=="T" sn[x]="50" if sn[x]=="U" sn[x]="51" if sn[x]=="V" sn[x]="52" if sn[x]=="W" sn[x]="53" if sn[x]=="X" sn[x]="54" if sn[x]=="Y" sn[x]="55" if sn[x]=="Z" else exit end x+=1 end for i in 0...sn.size num=num.to_s+sn[i].to_s end if n==16 n=4 elsif n==25 n=5 elsif n==27 n=3 elsif n==32 n=2 elsif n==36 n=6 end num=(num.to_i).sjz(n) return num.truncate == num ? num.truncate : num end
VALUE rb_fix2str(VALUE x, int base) { extern const char ruby_digitmap[]; char buf[SIZEOF_VALUE*CHAR_BIT + 2], *b = buf + sizeof buf; long val = FIX2LONG(x); int neg = 0; if (base < 2 || 36 < base) { rb_raise(rb_eArgError, "invalid radix %d", base); } if (val == 0) { return rb_usascii_str_new2("0"); } if (val < 0) { val = -val; neg = 1; } *--b = '\0'; do { *--b = ruby_digitmap[(int)(val % base)]; } while (val /= base); if (neg) { *--b = '-'; } return rb_usascii_str_new2(b); }
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |