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 2
网上找的,供参考:
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
|