
1 stupidcat OP 题目原话是“ find a recursive solution ”。可是这个除以 2 ,要怎么 recurse 呢?? |
2 huamiao 2016-03-08 12:09:30 +08:00 这涉及到数学方法?感觉是利用乘 10 再加上某个数,以及除 10 和得到的余数,通过判断商是否为 0 来监控计算进程?不过题目有一些不清楚的地方,比如 divideBy2 是否是直接在传入的 NaturalNumber 中进行计算?即按地址返回还是会生成一个值?根据给出的函数名,应该是直接对 n 进行操作,那么这样会涉及到某些奇数除 2 是不能整除的,这里怎么处理?按照题目的要求,看上去是给出一个被 10 整除的商?例如输入 3 则输出为 1 ,输入 7 则输出为 3 ? |
4 shiji 2016-03-08 12:29:59 +08:00 网上找的,供参考: http://pastebin.com/E76kV1Zb |
5 shiji 2016-03-08 12:33:26 +08:00 如果是给别人写作业,千万别直接抄,使劲改改,某些国家作业查抄袭很高科技 |
6 czb 2016-03-08 12:42:58 +08:00 via Android Academic dishonesty ^_^ |
7 huamiao 2016-03-08 12:56:53 +08:00 把自己分成 10 份的话,那么除以二就是减去自己的 1/10 五次。因为这里的函数只允许增加,所以除以二就是把自己的 1/10 加五次?感觉是这样的。 |
9 stupidcat OP 虽然意义不大,我还是说一下吧…… #4 那个方法还是挺巧妙的,每次先做两次 divideBy10(),得到当前数字的最后两位,这样就可以得到一位商,然后用 multiplyBy10(int k)把倒数第二位加回去,再调用 divideBy2(),这就递归了…… |
10 aheadlead 2016-03-08 14:33:34 +08:00 把十进制数的每一位取出来 然后手动除法如何 |
11 zhjits 2016-03-08 15:12:31 +08:00 private static int myToInt(NaturalNumber n) { if (n.isZero()) return 0; return n.divideBy10() + myToInt(n) * 10; } private static void divideBy2(NaturalNumber n) { int ret = NaturalNumber.myToInt(n); n.clear(); n.multiplyBy10(ret >> 1); } 简单粗暴有递归。 Java 不太会写,将就着看个大概思路吧。 |
12 songpengf117 2016-03-08 16:21:38 +08:00 #4 lastDigit = lastDigit / 2 是几个意思 ? |
13 songpengf117 2016-03-08 16:44:01 +08:00 transferFrom 不需要解释一下吗 |
14 huamiao 2016-03-08 16:46:21 +08:00 private static void rebuildNumber(NaturalNumber n){ int r = n.divideBy10(); if (n.isZero()) { n.multiplyBy10(r * 5); } else { rebuildNumber(n); n.multiplyBy10(r * 5); } } public static void divideBy2(NaturalNumber n) { rebuildNumber(n); n.divideBy10(); } 如果可以有子函数的话,通过每一位+自己的 5/10 也是可以达到目的的。 |
15 SoloCompany 2016-03-08 20:32:01 +08:00 居然设计成 Mutable |