Online Compiler C

#include <stdio.h> int grow_up(int n){ if (n<10){ return 1; } int last_digit=10; while(n>0){ int current_digit=n%10; if (current_digit>=last_digit){ return 0; } last_digit=current_digit; n/=10; } return 1; }
这段代码定义了一个函数 `grow_up`,用于判断一个整数是否各位数字从左到右严格递增(例如123是,132不是)。它从右向左检查数字,确保每个数字都比前一个(更左边的)小。

- 函数中 `last_digit` 初始化为10,这比任何数字都大,所以第一个数字(最右边)总是通过检查。但这里有一个逻辑问题:你从右向左比较,要求当前数字小于上一个数字,这实际上检查的是数字从右向左是否递减,等价于从左向右递增。但初始值10可能导致第一个数字比较时永远通过,这没问题。然而,当数字为0时,循环条件 `n>0` 会跳过,但0本身是合法的个位数,函数会返回1,这是正确的。

- 主要问题:对于像10这样的数,个位是0,十位是1,从右向左看,0小于1,所以返回1,但10从左向右看是1和0,不是递增的。这是因为你的算法检查的是严格递减(从右向左),但10的十位1大于个位0,从右向左是递减,所以误判为递增。你需要重新考虑比较的方向或初始值。