纪中集训2020.01.14【NOIP普及组】模拟赛C组总结—————— 数制转换
1.数制转换
这题我居然拿了(10 0分), 高分党,我才发现我真会投资。 ~~~~直接花了1个小时还多!!!
但,还是一头雾水!【提高组】B组巨佬,只花了20分钟AC了!!!
膜拜巨佬
———————华丽的分割线———————
言归正传
**题目大意:**有一种数制的基数是3,权值可以取-1,0,1,并分别用符号-,0,1表示,如这种数制的101表示十进制数的10,即1乘9+0乘3+1乘1=10,又如这种数制的-0表示十进制数的-3,即-1乘3+0乘1=-3。编程把给定的有符号整数转换为新数制的数,该数的前头不能有多余的0,如10的新数制表示是101,则不要输出成0101。
Input
有一行或多行,每行有一个整数N(-2147483647<=N<=2147483647),整数内不会有其他分隔符,整数前后可能有空格。
Output
对输入文件的每一行输出一行,该行是输入行的整数的新数制表示,结果不能有前导空格。
Sample Input
10
-3
Sample Output
101
-0
WHAT!!!WT!!! 蒟蒻(我)看不懂呀!巨佬大致的讲了一下然后,就过了!
这只是到送分的水题,不用花太多的功夫。不就转个三进制吗!
分析一下:(猜进制+转进制+判符号=此题AC)从101变到10,1乘9+0乘3+1*1=10,就是乘3^(n-1),就知道的转三进制。然后分正负数,所以就判断个正负号,即可!
附上Pascal AC 代码:
var
n,i,j,x,y,p,t,bj,w,l:longint;
s,ans:ansistring;
a:array[0..1000005] of longint;
begin
readln(s);
while (s<>'') do
begin
for i:=1 to 500 do
a[i]:=0;
i:=1;
while s[i]=' ' do
inc(i);
delete(s,1,i-1);
i:=length(s);
while s[i]=' ' do
dec(i);
inc(i);
delete(s,i,length(s)-i+1);
x:=0;
p:=1;
if s[1