所以atm一直困扰我的计算器。只能使用以下方法:
int succ(int x){
return ++x;
}
int neg(int x){
return -x;
}
我已经得到的是+,-。 *。 Iterativ也是递归的(因此如果需要,我也可以使用它们)。 现在我坚持使用除法,因为我不知道如何处理逗号及其背后的逻辑。只是想像一下如何处理succ()和neg()这是一个减法iterativ和递归的示例:
int sub(int x, int y){
if (y > 0){
y = neg(y);
x = add(x, y);
return x;
}
else if (y < 0){
y = neg(y);
x = add(x, y);
return x;
}
else if (y == 0) {
return x;
}
}
int sub_recc(int x, int y){
if (y < 0){
y = neg(y);
x = add_recc(x, y);
return x;
} else if (y > 0){
x = sub_recc(x, y - 1);
x = x - 1;
return x;
}else if( y == 0) {
return x;
}
}
答案 0 :(得分:0)
如果您可以减去和加法,则可以处理整数除法。用伪代码就是:
division y/x is:
First handle signs because we will only divide positive integers
set sign = 0
if y > 0 then y = neg(y), sign = 1 - sign
if x > 0 then y = neg(y), sign = 1 - sign
ok, if sign is 0 nothing to do, if sign is 1, we will negate the result
Now the quotient is just the number of times you can substract the divisor:
set quotient = 0
while y > x do
y = y - x
quotient = quotient + 1
Ok we have the absolute value of the quotient, now for the sign:
if sign == 1, then quotient = neg(quotient)
练习中保留了正确的C ++语言翻译以及递归部分...
递归y / x == 1 +(y-x)/ x而y> x
上面是整数部分。整数既好又容易,因为它可以提供精确的操作。 base 中的浮点表示总是接近尾数* base exp ,其中尾数是最大位数的整数或0到1之间的数字(以正常表示)。并且您可以从一种表示形式传递到另一种表示形式,但要用尾数的位数来改变指数部分:2.5是.25 10 1 <的25 10 -1 (整数尾数) / sup>(0 <=尾数<1)。
因此,如果要使用以10为底的浮点数,则应该:
它给出333333 * 10 -6 ,因此.333333以规范化形式
好吧,这将是很多沸腾的代码,但没有什么真正困难的。
简短的日志故事:只记得您是如何用纸和铅笔学到的...