有一题不会 求解QAQ最好有注释
pascal吧
全部回复
仅看楼主
level 5
MinecraftKe 楼主
入门OJ
Web Board
ProblemSet
Status
Ranklist
Contest
Login
1978: [usaco2006 Feb]neg2Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 1 Solved: 1
[Submit][Status][Web Board]Description借助于对数字理论的研究,奶牛们打算建立一套计数系统。它们打算建立的计数系统是二进制的,但基数为-2,而
不是+2。另它们非常高兴的是,使用-2作为基数表示数字不需要符号位。我们知道进制数每位的权(从右到左)分
别为1(基数的0次方),基数^1,基数^2,等等。基数为-2的情况下,每位的权分别为1,-2,4,-8,16,-32,
……(从右向左)。因此,从1开始计数依次为:1, 110, 111, 100, 101, 11010, 11011, 11000, 11001
, 等等。令人惊奇的是,使用基数-2,负数也可以用1和0来表示,而且不需要符号位。例如,从-1开始向下计数
依次为:11, 10,1101, 1100, 1111, 等等。请你帮助奶牛转换普通十进制数(范围-2,000,000,000..2,000,0
00,000)到基数为-2的计数系统。
InputLine 1: 一个需要转换的十进制整数
OutputLine 1: 一个整数,表示输入整数转换为基数为-2后的结果。
输入0,仍然输出一个0。
Sample Input-13 Sample Output110111 样例解释: 从右向左读: 1*1 + 1*-2 + 1*4 + 0*-8 +1*16 + 1*-32 = -13 HINT
Source
[Submit][Status]
网址:http://begin.lydsy.com/JudgeOnline/problem.php?id=1978
2017年01月14日 02点01分 1
level 5
MinecraftKe 楼主
我的源码:
var n:longint;
dt:string;
procedure qym(a:longint; var y:string);
var b,c:longint;
x:string;
begin
b:=a;
y:='';
repeat
c:=b mod 2;
b:=b div 2;
str(c,x);
y:=x+y;
until b=0;
end;
procedure qfm(var a:string);
var tr:string;
i:longint;
begin
tr:='';
for i:=length(a) downto 1 do
if a[i]='1' then tr:='0'+tr
else
tr:='1'+tr;
tr:='1'+tr;
a:=tr;
end;
procedure qbm(var a:string);
var ty,tz:string;
i,o:longint;
begin
ty:=a;
for i:=length(a) downto 1 do
if ty[i]='0' then
begin
delete(ty,i,1);
insert('1',ty,i);
tz:=copy(ty,i+1,length(ty)-i);
delete(ty,i+1,length(ty)-i);
for o:=1 to length(tz) do
insert('0',ty,length(ty)+1);
a:=ty;
exit;
end;
end;
begin
readln(n);
qym(n,dt);
qfm(dt);
qbm(dt);
writeln(dt);
end.
2017年01月14日 02点01分 2
但是错了QAQ
2017年01月14日 02点01分
1