|| 返回 || 本站首页 ||奥赛信息||计算机基础||pascal基础||数据结构||经典算法||试题汇编||校本教程||自主练习||

|| 自主练习>> 进制转化问题

双击自动滚屏 

   

进制转化问题

 

【题目】键盘输入一个十进制的整数,及确定进制n,把这个数转换成相应的n进制输出。

        (其中2〈=n〈=16)

         例如:输入10,n=3  则输出  (10)10=(101)3

【参考程序】

        var  i,j,m,n:longint;

             a:array [1..100] of byte;    {用数组存放求出的余数}

        begin

             writeln('input m,n');

             fillchar(a,sizeof(a),0);

             readln(m,n);

             write(m);

             i:=0;

             repeat

                   i:=i+1;

                   a[i]:= m mod n;

                   m:=m div n;

             until m=0;

             write('=(');

             for j:=i downto 1 do

                 if a[j]>9 then write(chr(a[j]+55))  {如果大于9,用字母输出}

                            else write(a[j]);

             writeln(')',n);readln;

        end.

 

 

【题目】把n进制的数化回十进制表示

        如 (10101)2=(21)10

【参考程序】

       var  cf,s,i,j,n:longint;

            m:string[20];

            a:array[1..20] of byte;

       begin

            writeln('input m,n');

            fillchar(a,sizeof(a),0);

            readln(m,n);    {用字符串接收要转换的数}

            for i:=1 to length(m) do begin   {把字符串换成数字,注意字母时的情况}

               if (m[i]<='9') and (m[i]>='0') then a[i]:=ord(m[i])-48;

               if (upcase(m[i])<='F') and (upcase(m[i])>='A') then

                  a[i]:=ord(upcase(m[i]))-55;

               if a[i]>=n then begin writeln('Error, Invaild m !');halt;end;

                  {如果含有不在n进制内的字符,则判为出错。如2进制的数,则不应

                   出现诸如10102,110031210等情况}

           end;

           cf:=1; s:=a[length(m)];                 {cf:乘方}

           for i:=length(m)-1 downto 1 do begin    {从低位向高位,逐步转换}

               cf:=cf*n;                           {s记录得出来的数}

               s:=s+a[i]*cf;

           end;

           writeln('(',m,')',n,'=',s);

           readln;

       end.

 

.context 进制3

【题目】任意进制间的互化。

        把n进制的M转化成k进制表示

        如m=ff n=16 k=2

        则有  (ff)16=(11111111)2

【参考程序】

     var s,n,k:longint;m:string[20];

         a:array [1..100] of byte;

 

     procedure first(m:string;n:integer);  {把数m化成十进制}

     var  cf,i,j:longint;

     begin

         for i:=1 to length(m) do begin

             if (m[i]<='9') and (m[i]>='0') then a[i]:=ord(m[i])-48;

             if (upcase(m[i])<='F') and (upcase(m[i])>='A') then

                a[i]:=ord(upcase(m[i]))-55;

             if a[i]>=n then begin writeln('Error, Invaild m !');halt;end;

         end;

         cf:=1; s:=a[length(m)];

         for i:=length(m)-1 downto 1 do begin

             cf:=cf*n;

             s:=s+a[i]*cf;

         end;

         write('(',m,')',n);write('=(',s,')10');

     end;

 

     procedure second(m,n:longint);  {把十进制的数化成k进制}

     var  i,j:longint;

     begin

          i:=0;

          repeat

                i:=i+1;

                a[i]:= m mod n;

                m:=m div n;

          until m=0;

          write('=(');

          for j:=i downto 1 do

              if a[j]>9 then write(chr(a[j]+55))

                         else write(a[j]);

          writeln(')',n);readln;

     end;

 

     begin

          fillchar(a,sizeof(a),0);

          writeln('input m,n,k:');  {m:数, n:原先进制, k:化成什么进制}

          readln(m,n,k);

          first(m,n);    {把n进制的m化成十进制数S}

          second(s,k);   {把S化成k进制}

     end.


 
 

 

 
 
 

制作与维护:重庆市忠县中学 谭海