Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

题解思路

Posted by ecust_linpeng at 2009-08-30 22:02:16 on Problem 3741 and last updated at 2009-09-30 13:35:06
很好的题目,代码量不长,但是比较难以理解,属于思考题。
题目大意,给你一个数串,记为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:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator