【问题标题】:How to get each individual digit of a given number in Basic?如何在Basic中获取给定数字的每个单独的数字?
【发布时间】:2018-04-05 13:54:55
【问题描述】:

我从互联网上下载了一个程序,需要从一个三位数的数字中打印出每个数字。例如:

输入:123

预期输出:

1

2

3

我有598

需要获取:

5
9
8

我尝试使用这个公式,但问题是当数字与小数函数失败时:

FIRST_DIGIT  = (number mod 1000) / 100
SECOND_DIGIT = (number mod 100) / 10
THIRD_DIGIT  = (number mod 10)

上面的例子是数字,所以这里是计算:

FIRST_DIGIT = (598 mod 1000) / 100 = 5,98

SECOND_DIGIT = (598 mod 100) / 10 = 9,8

THIRD_DIGIT = (598 mod 10) = 8

所以我的问题是是否有示例或更有效的代码可以从没有小数点的数字中获取每个数字?我不想使用四舍五入最接近的数字,因为如果数字大于 0.5,有时它会填充失败。

谢谢

【问题讨论】:

    标签: modulo basic


    【解决方案1】:

    我不是 Basic 方面的专家,但看起来您必须将浮点数转换为整数。一个快速的谷歌搜索告诉我你必须使用Int(floating_point_number) 将浮点数转换为整数。 所以 Int((number mod 100)/ 10) 应该是您正在寻找的那个。

    【讨论】:

      【解决方案2】:

      最简单的解决方案是使用整数除法 (\) 而不是浮点除法 (/)。

      如果您将每个示例替换为反斜杠 (\) 而不是正斜杠 (/),它们将返回整数值。

      FIRST_DIGIT  = (598 mod 1000) \ 100 = 5
      SECOND_DIGIT = (598 mod 100) \ 10 = 9
      THIRD_DIGIT  = (598 mod 10) = 8
      

      【讨论】:

        【解决方案3】:

        你不必做任何花哨的整数计算,只要你把它从一个字符串中拉出来:

        INPUT X
        X$ = STR$(X)
        FOR Z = 1 TO LEN(X$)
            PRINT MID$(X$, Z, 1)
        NEXT
        

        然后,例如,您可以对每个字符串元素进行操作:

        INPUT X
        X$ = STR$(X)
        FOR Z = 1 TO LEN(X$)
            Q = VAL(MID$(X$, Z, 1))
            N = N + 1
            PRINT "Digit"; N; " equals"; Q
        NEXT
        

        此外,您可以逐个字符地拆开字符串:

        INPUT X
        X$ = STR$(X)
        FOR Z = 1 TO LEN(X$)
            SELECT CASE MID$(X$, Z, 1)
                CASE " ", ".", "+", "-", "E", "D"
                    ' special char
                CASE ELSE
                    Q = VAL(MID$(X$, Z, 1))
                    N = N + 1
                    PRINT "Digit"; N; " equals"; Q
            END SELECT
        NEXT
        

        【讨论】:

          【解决方案4】:

          最后,所有的字符串元素都可以被解析:

          INPUT X
          X$ = STR$(X)
          PRINT X$
          FOR Z = 1 TO LEN(X$)
              SELECT CASE MID$(X$, Z, 1)
                  CASE " "
                      ' nul
                  CASE "E", "D"
                      Exponent = -1
                  CASE "."
                      Decimal = -1
                  CASE "+"
                      UnaryPlus = -1
                  CASE "-"
                      UnaryNegative = -1
                  CASE ELSE
                      Q = VAL(MID$(X$, Z, 1))
                      N = N + 1
                      PRINT "Digit"; N; " equals"; Q
              END SELECT
          NEXT
          IF Exponent THEN PRINT "There was an exponent."
          IF Decimal THEN PRINT "There was a decimal."
          IF UnaryPlus THEN PRINT "There was a plus sign."
          IF UnaryNegative THEN PRINT "There was a negative sign."
          

          【讨论】:

            猜你喜欢
            • 2017-02-13
            • 2021-03-24
            • 2014-10-12
            • 2011-03-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多