我现在有一组数据,如下:
499023
398940
2490
348
23
如何按比例缩小到指定位数,如果缩小到100范围内,而保证大小顺序一致。
怎么个算法

解决方案 »

  1.   

    求余
    499023 % 100=23
    398940 % 100=40但是按照比例有点复杂,需要几种算法结合在一起。
    你只能先按照原值进行排序,再缩小。
    如果你要求缩小到100以内,并保持缩小后结果的大小一致。。理论上是不成立的。。(可以保持顺序一致,就是缩小之前排好序)。。理论上来说,你要的是一个hash函数(例如MD5是一个很典型的hash函数),这个函数将一个大数,变成指定的小数。。而如果你的小数要求是100以内的话,那么肯定会有2个或多个不等的大数,hash成同一个数,例如
    假设hash(999)=100,
    hash(9999)=100,那小数是相等的,不可能再保留原来数值的顺序
      

  2.   

    499023 
    398940 
    2490 
    348 
    23 
    方法一:首先将这些原有的数进行排序(显然你是已经排好了)然后取最大的值(这里为499023)然后定义一个int rate=10;
    int maxNum=499023;
    while(maxNum/rate>100){rate*=10;}得到这个rate值之后再将每一个数值除以这个rate,这样每一个数据肯定都会小于100啦~
    方法二:全部数加起来求各,然后分别计算每一个的百分比~ 这样每一个数都变为100以内的数据啦~统计图也不过是求他的百分比~