进制转换题目及代码
进制转换题目及代码 By LYLtim
2010-09-29 20:50
1、十进制转换成任意进制
【问题描述】
请你编一程序将十进制整数转换成任意进制m 的数(2≤m≤16)。
【输入格式】
输入数据共有二行。
第一行是一个正整数,表示需要转换的十进制数。
第二行也是一个正整数,表示转换之后的数的进制m(2≤m≤16)。
【输出格式】
输出仅一行,包含一个正整数,表示转换之后的m 进制的数。
【输入样例】mchange.in
15
16
【输出样例】mchange.out
F
【参考程序】
//By LYLtim
var x:longword;
m,n,i:byte;
a:array[word]of byte;
begin
assign(input,'mchange.in');reset(input);
assign(output,'mchange.out');rewrite(output);
readln(x);readln(m);
n:=0;
repeat
inc(n);
a[n]:=x mod m;
x:=x div m;
until x=0;
for i:=n downto 1 do
begin
if a[i]
if a[i]>=10 then write(chr(ord(a[i])-10+ord('A'))); end;
close(input);close(output);
end.
2、任意进制转换成十进制
【问题描述】
请你编一程序将将任意进制n(2≤n≤16)的整数转换成十进制数。
【输入格式】
输入数据共有二行。
第一行是一个正整数,表示需要转换的数的进制n(2≤n≤16)。
第二行是一个n 进制的数,若n>10则用大写字母A ~F 表示数码10~15。
【输出格式】
输出仅一行,包含一个正整数,表示转换之后的十进制数。
【输入样例】nchange.in
16
FF
【输出样例】nchange.out
255
【参考程序】
//By LYLtim
uses math;
var n,i,len:byte;
sum:longword;
s:string;
begin
assign(input,'nchange.in');reset(input);
assign(output,'nchange.out');rewrite(output);
readln(n);readln(s);
sum:=0;
len:=length(s);
for i:=1 to len do
begin
if s[i]in['0'..'9']then
inc(sum,(ord(s[i])-ord('0'))*n**(len-i));
if s[i]in['A'..'F']then
inc(sum,(10+ord(s[i])-ord('A'))*n**(len-i));
end;
writeln(sum);
close(input);close(output);
end.
3、任意进制转换
【问题描述】
请你编一程序实现两种不同进制之间的数据转换。
【输入格式】
输入数据共有三行,第一行是一个正整数,表示需要转换的数的进制
n(2≤n≤16),第二行是一个n 进制数,若n>10则用大写字母A ~F 表示数码10~15,并且该n 进制数对应的十进制的值不超过1000000000,第三行也是一个正整数,表示转换之后的数的进制m(2≤m≤16)。
【输出格式】
输出仅一行,包含一个正整数,表示转换之后的m 进制数。
【输入样例】change.in
16
FF
2
【输出样例】change.out
11111111
【参考程序】
//By LYLtim
uses math;
var n,m,len,i,l:byte;
sum:longword;
s:string;
x:longword;
a:array[byte]of byte;
begin
assign(input,'change.in');reset(input);
assign(output,'change.out');rewrite(output);
readln(n);readln(s);readln(m);
sum:=0;
len:=length(s);
for i:=1 to len do
begin
if s[i]in['0'..'9']then
inc(sum,(ord(s[i])-ord('0'))*n**(len-i));
if s[i]in['A'..'F']then
inc(sum,(10+ord(s[i])-ord('A'))*n**(len-i));
end;
x:=sum;
l:=0;
repeat
inc(l);
a[l]:=x mod m;
x:=x div m;
until x=0;
for i:=l downto 1 do
begin
if a[i]
if a[i]>9 then write(chr(ord('A')+ord(a[i])-10)); end;
close(input);close(output);
end.
4、数列(sequence.pas )
【问题描述】
给定一个正整数k(3≤k≤15),把所有k 的方幂及所有有限个互不相等的k 的方幂之和构成一个递增的序列,例如,当k=3时,这个序列是:
1,3,4,9,10,12,13,…
(该序列实际上就是:30,31,30+31,32,30+32,31+32,30+31+32,…) 请你求出这个序列的第N 项的值(用10进制数表示)。
例如,对于k=3,N=100,正确答案应该是981。
【输入文件】
输入文件sequence.in 只有1行,为2个正整数,用一个空格隔开: k N
(k 、N 的含义与上述的问题描述一致,且3≤k≤15,10≤N≤1000)。
【输出文件】
输出文件sequence.out 为计算结果,是一个正整数(在所有的测试数据中,结果均不超过2.1*109)。(整数前不要有空格和其他符号)。
【输入样例】
3 100
【输出样例】
981
【参考程序】
//By LYLtim
uses math;
var n,m,len,i,l:byte;
sum:longword;
s:string;
x:longword;
a:array[byte]of byte;
begin
assign(input,'change.in');reset(input);
assign(output,'change.out');rewrite(output);
readln(n);readln(s);readln(m);
sum:=0;
len:=length(s);
for i:=1 to len do
begin
if s[i]in['0'..'9']then
inc(sum,(ord(s[i])-ord('0'))*n**(len-i));
if s[i]in['A'..'F']then
inc(sum,(10+ord(s[i])-ord('A'))*n**(len-i));
end;
x:=sum;
l:=0;
repeat
inc(l);
a[l]:=x mod m;
x:=x div m;
until x=0;
for i:=l downto 1 do
begin
if a[i]
if a[i]>9 then write(chr(ord('A')+ord(a[i])-10)); end;
close(input);close(output);
end.
5、波浪数(num.pas )
【问题描述】
波浪数是在一对数字之间交替转换的数,如1212121,双重波浪数则是指在两种进制下都是波浪数的数,如十进制数191919是一个十进制下的波浪数,它对应的十一进制数121212也是一个波浪数,所以十进制数191919是一个双重波浪数。
类似的可以定义三重波浪数,三重波浪数在三种不同的进制中都是波浪数,甚至还有四重波浪数,如十进制300=606(七进制)=363(九进制)=454(八进制)=1A1(十三进制)…,你的任务就是在指定范围内找出双重、三重、四重波浪数。
【输入格式】
一行,包含五个用空格隔开的十进制整数,前两个数表示进制的范围(2~32),第三与第四个数表示指定的范围(1~10000000),第五个数为2,3,4中的一个,表示要找的波浪数的重数。
【输出格式】
从小到大,以十进制形式输出指定范围内的指定重数的波浪数,一行输出一个数。
【输入样例】num.in
10 11 190000 960000 2
【输出样例】num.out
191919
【参考程序】
//By LYLtim
var hex_low,hex_high,tar:byte;
low,high,x:longword;
function is_wave(x:longword;hex:byte):boolean;
var l:byte;
a:array[byte]of byte;
begin
l:=0;
repeat
inc(l);
a[l]:=x mod hex;
x:=x div hex;
if(l>2)and(a[l]a[l-2])or(l=2)and(a[l]=a[l-1])then exit(false);
until x=0;
exit(true);
end;{is_wave}
function chongshu(x:longword):byte;
var hex:byte;
begin
chongshu:=0;
for hex:=hex_low to hex_high do
begin
if is_wave(x,hex) then inc(chongshu);
if chongshu>tar then break;
end;
exit(chongshu);
end;{chongshu}
begin{main}
assign(input,'num.in');reset(input);
assign(output,'num.out');rewrite(output);
readln(hex_low,hex_high,low,high,tar);
close(input);
for x:=low to high do if chongshu(x)=tar then writeln(x); close(output);
end.