[从头学数学] 第33节 有余数的除法

剧情提要:
[机器小伟]在[工程师阿伟]的陪同下进入练气期第四层功法的修炼,
这次要修炼的目标是[有余数的除法]。

正剧开始:

星历2016年01月06日 13:05:43, 银河系厄尔斯星球中华帝国江南行省。
[工程师阿伟]正在和[机器小伟]一起研究有余数的除法。

[从头学数学] 第33节 有余数的除法_第1张图片


本次功法中出现了除法竖式:



[工程师阿伟]费了九牛二虎之力,终于给[机器小伟]制造出了除法竖式绘制神器:

<span style="font-size:18px;">/**
* @usage   除法竖式
* @author  mw
* @date    2016年01月06日  星期三  11:05:09 
* @param
* @return
*
*/
function verticalDiv(dividend, divisor) {
	/*
		被除数 dividend
		除数 divisor
		商数 quotient
		余数 remainder
	*/
	
	var r = 20;
	
	var lenOfDividend =dividend.toFixed(0).length;
	var lenOfDivisor = divisor.toFixed(0).length;
	var quotient = Math.floor(dividend/divisor);
	var lenOfQuotient = quotient.toFixed(0).length;
	var remainder = dividend - quotient * divisor;
	
	a = [divisor, dividend, quotient, remainder];
	
	//除数位置
	var x0 = 20 + lenOfDivisor * r, y0= 0;
	//被除数位置
	var x1 = x0 + r + lenOfDividend * r, y1 = y0;
	//商位置
	var x2 = x1, y2 = y1 - 2 * r;
	
	plot.beginPath()
		.bezierCurveTo(x0-r, y0+r, x0-0.5*r, y0+0.5*r, x0-0.2*r, y0-0.5*r, x0, y0-r)
/*
		.moveTo(x0-r, y0+r)
		.lineTo(x0, y0-1*r)*/
		.closePath()
		.stroke();
	plot.beginPath()
		.moveTo(x0, y0-1*r)
		.lineTo(x2+r, y0-1*r)
		.closePath()
		.stroke();
		
	rightAlign(a[0], x0, y0, r);
	rightAlign(a[1], x1, y1, r);
	rightAlign(a[2], x2, y2, r);
	

	var tmp1, tmp2, tmp3, x, y;

	//x, y的初始位置
	x = x1 - (lenOfQuotient-1) *r, y = y1 + 1.5 * r;
	
	if (lenOfQuotient > 1) {
		for (var i = 0; i < lenOfQuotient; i++) {
			if (i == 0) {
				//待减
				tmp1 = (quotient.toFixed(0)[i] - '0')*divisor;
				//被减
				tmp2 = Math.floor(dividend / Math.pow(10, lenOfQuotient-i-2));
				//减得的差进入下一轮
				tmp3 = tmp2 - tmp1 * 10;
				
				rightAlign(tmp1, x, y, r);
				plot.beginPath()
					.moveTo(x0, y+r)
					.lineTo(x1 +r, y+r)
					.closePath()
					.stroke();
				rightAlign(tmp3,x+r, y+2*r, r);
				
				//位置递增
				x += r;
				y += 3.5*r;
			} 
			else if (i < lenOfQuotient-1 ) {
				//中间轮数
				tmp1 = (quotient.toFixed(0)[i] - '0')*divisor;

				tmp3 = tmp3*10 + (dividend.toFixed(0)[i+lenOfDividend-lenOfQuotient+1]-'0')-tmp1*10;
				
				rightAlign(tmp1, x, y, r);
				plot.beginPath()
					.moveTo(x0, y+r)
					.lineTo(x1 +r, y+r)
					.closePath()
					.stroke();
				rightAlign(tmp3,x+r, y+2*r, r);
				
				x += r;
				y += 3.5*r;
				
			}
			else {
				//最后一轮
				tmp1 = (quotient.toFixed(0)[i] - '0')*divisor;
				rightAlign(tmp1, x, y, r);
				plot.beginPath()
					.moveTo(x0, y+r)
					.lineTo(x1 +r, y+r)
					.closePath()
					.stroke();
					
				plot.beginPath()
					.moveTo(x0, y+r)
					.lineTo(x1 +r, y+r)
					.closePath()
					.stroke();
				rightAlign(a[3],x, y+2*r, r);
			}
		}
	}
	else {
		//最后一轮
		tmp1 = quotient*divisor;
		rightAlign(tmp1, x, y, r);
		plot.moveTo(x0, y+r)
			.lineTo(x1 +r, y+r)
			.stroke();
			
		plot.beginPath()
			.moveTo(x0, y+r)
			.lineTo(x1 +r, y+r)
			.closePath()
			.stroke();
		rightAlign(a[3],x, y+2*r, r);
	}

}</span>

想到把数字拆成一部分、一部分、一部分的那种痛苦,阿伟不禁叹了口气,不过好在,终于成功了。

小伟拿到了这个神器,解决除法竖式问题不费吹灰之力:

<span style="font-size:18px;">function myDraw() {
	plot.init();
	setPreference();

	var row = 1, col=3;
	for (var i=0; i < col; i++) {
		setSector(row, col, 1, i+0.5);
		verticalDiv(11,  i+3);
	}	
}</span>


下面就是相对容易的算式了:

[从头学数学] 第33节 有余数的除法_第2张图片


<span style="font-size:18px;">###
# @usage   带余数的除法
# @author  mw
# @date    2016年01月06日  星期三  10:55:08 
# @param
# @return
#
###
def divWithRemainder(a, b):
    result = divmod(a, b);
    print('{0} ÷ {1} = {2} ?????? {3}'.format(a, b, result[0], result[1]));
    return;</span>


>>> 
7 ÷ 2 = 3 •••••• 1


[从头学数学] 第33节 有余数的除法_第3张图片

>>> 
44 ÷ 8 = 5 •••••• 4
44 ÷ 9 = 4 •••••• 8



<span style="font-size:18px;">function myDraw() {
	plot.init();
	setPreference();

	var a = [43, 7,26,4,59,7];
	var len = Math.floor(a.length/2);
	var row = 1, col=4;
	
	for (var i = 0; i < len; i++) {
		setSector(row, col, 1, i+1);
		verticalDiv(a[2*i], a[2*i+1]);
	}	

}</span>



[从头学数学] 第33节 有余数的除法_第4张图片

小伟决定试一下神器的威力:

[从头学数学] 第33节 有余数的除法_第5张图片

算得对不对呢?

>>> 
123456 ÷ 789 = 156 •••••• 372

[从头学数学] 第33节 有余数的除法_第6张图片

>>> 
1234567890 ÷ 789 = 1564724 •••••• 654


[从头学数学] 第33节 有余数的除法_第7张图片

>>> 
1234567890 ÷ 78901234 = 15 •••••• 51049380

经过这些测试,小伟终于完全证实了神器的强大威力。

本节到此结束,欲知后事如何,请看下回分解。

你可能感兴趣的:([从头学数学] 第33节 有余数的除法)