我正在尝试输出动态接受的号码并打印接受号码中的位数
WHILE N !=0
LOOP
R:=MOD(N,10);
CNT:=CNT+1;
N:=TRUNC(N/10);
END LOOP;
我只是想知道它如何正确理解我用我的逻辑尝试了这个程序,我得到了我需要但是这个源代码很难理解,我想知道这是如何工作的,为什么mod用于这段代码虽然没有使用它,但我得到了正确的输出?为什么在这里使用截断?*
答案 0 :(得分:1)
这会创建一个循环,以查看您可以将数字除以10的时间。
说N = 1234
循环中断条件为N != 0
,因此请进入循环。
这并不是必要的,因为你可以看到你在其他任何地方都不使用R
。
R := MOD(N,10);
然后计算第一个数字
CNT:=CNT+1;
并且
N:=TRUNC(N/10); -- Return N = 123 instead of 123.4
CNT=2
返回N = 12
CNT=3
返回N = 1
CNT=4
返回N = 0
并结束循环,因为N == 0
撤退CNT = 4
。
答案 1 :(得分:1)
重新格式化和编号你的行:
1. WHILE N !=0 LOOP
2. R:=MOD(N,10);
3. CNT:=CNT+1;
4. N:=TRUNC(N/10);
5. END LOOP;
N
非零(即有更多数字)。CNT
来丢弃结果的小数部分 - 如果你没有丢弃结果的小数部分,那么循环永远不会终止,如果{{1然后TRUNC()
也永远不会为零。执行相同计算的单行方法是使用对数:
N != 0
N/10
获取CNT := CEIL( LOG( 10, ABS( N ) ) );
ABS()
获取N
LOG( 10, N )
将所有小数部分四舍五入以得到整数。