Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
题解思路很好的题目,代码量不长,但是比较难以理解,属于思考题。 题目大意,给你一个数串,记为n0,当作p进制数来处理转换,可以得到这个数在10进制下这个数的表示,然后把这个数的值表示成q进制,重新得到一个数串,把它再当作n0,重复以上操作, 直到n0与当作p进制数来处理得到的那个数一样。就是处理前和处理后该数不发生变化。 首先题目描述的不是很好,中间的那个10进制下的值并不一定表示成10进制,而是应该表示成q进制。 简化后就是,给你一个数串n0,当作p进制数来处理,得到一个用q进制来表示的新串。再重复把该新串当作p进制数来处理,……直到某次处理前后数串不再发生变化,给你p,q,(p<q)和一个数串,需要输出最后不发生变化的数串。 比如 p=2,q=4; 数串是321,在p进制下该数的大小是17(10进制)(也可以是20进制的h,或者8进制的21,这里应该是用大于q的进制来存数),表示成q进制的数串是101。 重复操作。 思路, 1,如果输入的数串是在p进制条件下小于q的话,则进行p进制转换后表示成q进制后,数串只有1位,数串不变,答案直接就是本身。 2 输入的数串是1234以p进制输入,转换成q进制后, 原来p进制值是1*p^3+2*p^2+3*p+4 q进制值是1*q^3+2*q^2+3*q+4 两个相减,对得到的式子因式分解都可以分解出(q-p) (q-p)(……)肯定是(q-p)的倍数。 剩下来的那个数肯定大于等于p 证明:输入的数大于q,那么转换之后至少有两位,不管怎么转换,位数不会减少。那么两位的p进制数至少大于等于p。 重复进行1。2。 直到结束循环。 该循环是必减少循环,就是循环每次数都在减小,直到减小到小于q,每次减小的数都是(q-p)的倍数,但每次减小的可能是(p-q)的任意倍数。但最后剩下来的数大于等于p 可以得出算法,就是读入数串,当作p进制数串(注意点), 1如果该数小于等于q就直接输出该数(以一位数表示) 2该数串大于q,就减去(p-q)直到减到小于q,再输出该数。 (这里,这里有个小技巧,可以避免高精度,否则会超时)。 Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator