回 帖 发 新 帖 刷新版面

主题:紧急,一道关于进制转换的 问题

帮帮忙,大侠们。
下面这个程序是将N进制的数转换为十进制的数,我遇上些问题。
PROGRAM ZJL;
  const m=20;
VAR    str1:string;
       str2:char;
       n,i,l,y,t:integer;
       x:longint;
       a:array[1..m] of integer;
BEGIN
       writeln('input number x,n:');
       readln(x,n);
       str(x,str1);
       l:=length(str1);
       for i:=1 to l do
          begin
               str2:=str1[i];
             [color=FF0000]  a[i]:=ord(str2)-ord('0');[/color]什么意思?
               end;
       y:=1;  t:=a[i];
       for i:=l-1  downto 1 do
          begin
             if a[i]>n then
                           begin
                              write('error');
                              exit;
                              end;
       y:=y*n;
       t:=t+a[i]*y;
       end;
       writeln(x,' ','[',n,']','>>','[',10,']',' ',t);
END.
哪里是“按权展开”的具体表达?

回复列表 (共2个回复)

沙发

!
str2:=str1[i];这一句是把str1第i位的字母拷贝出来......(同等于str2:=copy(
str1,i,1),但类型不同,此时会有类型错误)
a[i]:=ord(str2)-ord('0');(用str2在ASC码中的位置减去'0'在ASC码中的位置,得到此数)
(实际上就是把str1中的各个位分别存入数组a中)
上面两句效果等同于:
val(copy(str1,i,1),a[i],code);

板凳

哦!那这里就是按权展开了。晕~~
y:=y*n;      
t:=t+a[i]*y;

我来回复

您尚未登录,请登录后再回复。点此登录或注册