POJ 2325 大数除法 贪心

 

要求:一个n位数M各位相乘得到一个数N,已知N求最小的M。N的位数小于1000.

方法:大数除法 贪心

题面看了好久:679 -> 378 -> 168 -> 48 -> 32 -> 6. 才知道是什么意思。

1.若N只有一位,那么前面加个1凑成两位数即可。

2.当N有多位时,M不会含有1,这样只会使位数增加且对乘积没有影响。因此M是由若干个2-9的数字排列而成的多位数,因所求是最小的N,故N是由这些数字从小到大排列而成的。

3.贪心:for循环从9到2遍历使判定是否能除尽,若能除尽则运算到除不尽该数为止。

              可能产生类似于1215=9*9*5*3的结果,倒序可避免1215=3*3*3*3*3*5的结果。

              此步即贪心求出尽可能多的较大的值放在后面使排列起来的M较小。

4.大数除法:用字符串s读取数字,并每位减'0'存储数字,但字符串长度需提前存储,字符串长度会变化。然后根据手算的原理进行计算,每步的结果用t数组存储。将t数组赋值给s,注意是从t数组的第一个不为0的位置开始赋值。

 

你可能感兴趣的:(POJ 2325 大数除法 贪心)