题目:
试定义类ARRAR,将一维整型数组中个元素进行排列,排序的方法是:根据去掉最高位数字后余下的数值按从小到大的顺序进行排列,最后显示排序后的原始数据。例如,数组{2035,134,4029},去掉最高位后得到的数组{35,34,29},排序{29,34,35},最终输出的结果为{4029,134,2035}。
思路:
以下是我的思路,如果有不同意见或看法,欢迎探讨
首先我们知道,int类型能存储 -2^16到2^16大小的数,最高位有可能是个位十位百位千位或者万位,比如123最高位是百位,1234最高位是千位,分差去掉最高位后得到的分别是23和234,显然234比23大,但如果是123和1022比呢,它两去掉最高位后得23和22,那最终的排序就是1022在前,123在后,因为22比23小。
那么问题来了,怎么得到除去最高位后的数值呢?(那肯定是取余啊,这还用想吗)但我发现一个问题,比如1234是对1000取余得234,就是去掉最高位后得到的数值,但如果数组里有其他位数的对1000取余就错了,那么怎么判断它有多少位呢?于是我想了一个方法
定义一个无符号整型数组num存储1,10,100,1000,10000,100000,......,然后拿题目给的数组中的元素对num数组中的元素逐个取余,如果第 i 次取余后的结果等于它本身,那么它的的位数就是 i-1 ,比如1234逐个对num中的元素取余,
1234%1=0ÿ