有没有大神可以帮忙按图上的要求写一段程序呀 感激不尽
vb吧
全部回复
仅看楼主
level 1
有没有大神可以帮忙按图上的要求写一段程序呀 感激不尽
2021年05月16日 04点05分 1
level 15
关于这个题,我感觉这上面的提示让我产生了N种思路[滑稽]
首先,只看这个题本身的话,我的第一反应是这种思路:循环除以10取余,并拼接余数,最后输出拼接结果,代码如下:
Do While N > 0
t = N Mod 10
s = s * 10 + t
N = N \ 10
Loop
Print s
但是继续看下面的提问和拓展……
提问一:如何去除末尾的零?
呃……不需要啊?[滑稽]对于数值型,首位的0会自动去掉,无需处理的啊
提问二:如何反转?从左取数字还是从右取数字?
嗯……这种思路只能从右取数字,这个问题也不成问题啊
拓展一:上面这个程序不能处理负数,如何改进?
简单,把循环条件从 N > 0 改成 N <> 0 即可
拓展二:上面用的是“取数字后直接打印”,也可以反转拼接后再打印
这就尴尬了[滑稽]合计着我这个思路从一开始就是按照拓展二来的
那好,再按照“取数字后直接打印”的思路写个代码:
'去除末尾的零(没错,这就有必要了)
Do While N Mod 10 = 0 And N <> 0
'这里的 N <> 0 是个容错处理,因为0除以10的余数也是0,如果输入了0而不进行排除,
'会造成死循环(前面的思路就没这个问题)
N = N \ 10
Loop
'反转打印
Do While N > 0 '此时这个条件写成 N <> 0 也可以,但是这个思路天生不能处理负数;
'不过有办法,一会再说
Print CStr(N Mod 10);
N = N \ 10
Loop
好了,再看提问和拓展:
提问一:如何去除末尾的零?
在开始输出之前,先用一个循环,当除以10的余数为0时,不输出余数,只除以10,这样就去掉0了
提问二:如何反转?从左取数字还是从右取数字?
这个其实“取数字”的核心算法没变,还是“除10取余”,所以仍然只能从右取数字,这个问题仍然不成问题
拓展一:上面这个程序不能处理负数,如何改进?
在“反转打印”之前,先判断数字的正负,如果是负数,则先输出一个负号,然后变成正数,即可正常继续,代码如下:
If N < 0 Then
Print "-";
N = -N
End If
拓展二:……这就不用说了
另外,刚才一直都在说“提问二”的问题其实不成问题,那什么情况下它会成问题呢?[滑稽]这就是我又想到的一种思路了:如果“取数字”的算法不用“除10取余”,而是改成“字符串截取字符”,那就有必要从右往左逐个取字符了
还有,关于“反转拼接后再打印”这种思路,拼接用的变量也可以换成字符串类型,此时就不像用数值型那样可以不必考虑末尾0的问题了,同样需要去掉0;或者倒不如说,如果反过来“不希望去掉末尾的0”,并且还想用变量保存拼接结果,那么字符串型是必然的选择(否则就需要上数组了)
不过,后面这些的代码我都不打算写了……
2021年05月16日 10点05分 2
吧务
level 14
试试 msgbox val(strreverse(inputbox("输入内容")))
2021年05月16日 14点05分 3
level 5
可以先用str将数字转化为字符串,然后再用StringBuffer反转字符串
2021年05月19日 13点05分 4
你这个方法非常威武。
2021年05月21日 03点05分
1