1

下面的程序计算并删除一个数字的余数,将计算出的余数相加并显示出来。

#import <Foundation/Foundation.h>
int main (int argc, char * argv[]) {
    @autoreleasepool {
        int number, remainder, total;
        NSLog(@"Enter your number");
        scanf("%i", &number);

        while (number != 0)
        {
            remainder = number % 10;
            total += remainder;
            number /= 10;
        }
        NSLog(@"%i", total);    
    }
    return 0;
}

我的问题是:

  1. 为什么程序设置为只要数字不等于0就继续?只要余数不等于0,它不应该继续吗?

  2. 什么时候从 的值中丢弃余数number?为什么之前没有number -= remainder声明n /=10

[额外问题:Objective-C 变得更容易理解了吗?]

4

2 回答 2

2
  1. 我们继续 untilnumber != 0而不是使用余数的原因是,如果我们的输入可以被10精确整除,那么我们就不会得到正确的输出(以 10 为底的数字之和)。

  2. 由于整数除法,余数被丢弃。请记住,整数不能保留小数位,因此当我们将 16 除以 10 时,我们得到的不是 1.6,而是 1。

是的,随着时间的推移,Objective-C 确实变得更容易了(但是,作为旁注,这绝对使用了 Objective-C 的 0 个特性,所以它基本上是带有NSLog调用的 C)。

请注意,输出并不总是您所期望的,但是,就像在 C / ObjC 中一样,(与 D 或 JS 等语言不同)变量并不总是初始化为设定值(在这种情况下,您假设0)。这可能会导致 UB 走下坡路。

于 2012-08-30T22:16:35.860 回答
0
  1. 它检查数字是否不等于零,因为余数很可能永远不会为零。如果我们输入 5 作为我们的输入值,第一次通过循环的余数将被设置为 5(因为 5 % 10 = 5),并且由于 5 / 10 = 0.5 和 ints 不存储,所以 number 将变为零浮点值,因此 .5 将被截断,数字的值将等于零。
  2. 余数不会从此代码中的 number 值中删除。我认为您可能对模运算符的作用感到困惑(请参阅此解释)。

奖励答案:一开始学习编程语言很困难,但从长远来看是非常有益的(如果你坚持下去的话)。您在第一次学习之后学习的每种新语言也很可能更容易学习,因为您将了解一般的编程结构和实践。祝你的努力好运!

于 2012-08-30T22:22:48.793 回答