如何存储我要分离的整数的数字?

时间:2019-06-14 23:29:59

标签: c algorithm

我遇到的问题是,我想取一个整数并将其分开。例如:用户输入:23432。控制台应打印“ 2 3 4 32。我遇到的问题是存储该数字。例如

  User Input : 2020
  assign input to num.
  digit = 2020 % 10 = 0 <--- 1st Digit
  num = num / 10 = 202
  digit2 = num % 10 = 2 <--- 2nd Digit
  num = num / 100 = 20.2 
  temp = round(num) = 20
  digit3 = num % 10 = 0 <--- 3rd Digit
  digit4 = num / 10 = 2 <---- 4th Digit

这种方法的问题在于它取决于用户输入,我正在使用范围1-32767,所以我不知道要创建多少个数字变量。使用我创建的结构,有人可以协助其以某种方式运行,无论数字是多少,数字都以我所描述的方式保存并打印出来?

int Rem(int num);
  int Div(int num);

  int main() {
      int num;
      printf("Enter an integer between 1 and 32767: ");
      scanf("%d", &num);
      Rem(num);
      Div(num);
      printf("%d","The digits in the number are: ");

  }


      int Rem(int num) {
          int rem = num % 10;
          return rem;
      }

      int Div(int num){
          int div = num / 10;
          return div;
      }

3 个答案:

答案 0 :(得分:0)

  

这种方法的问题在于它取决于用户输入,我正在使用范围1-32767,所以我不知道要创建多少个数字变量。

计算一下。您可以通过将变量每次增加10倍来完成此操作,直到再增加一次使其大于输入数字即可:

int num;
printf("Enter an integer between 1 and 32767: ");
scanf("%d", &num);
int div = 1;
while(div * 10 <= num)
    div *= 10;

然后,您可以将数字除以该除数,以获得每个数字,每次将除数除以10,即可一次移位一位。

printf("The digits in the number are: ");
while(div > 0)
{
    printf("%d ", (num / div) % 10);
    div /= 10;
}

答案 1 :(得分:0)

这是一种非常复杂的方法。为什么不读取字符串,并像这样解析字符串:

int main(void) {
  char buf[256]; // should be big enough, right? 10^256-1
  memset(buf, 0, 256];
  puts("enter something : ");
  if( NULL == fgets(STDIN, 255, buf)) {
    perror("Egad! Something went wrong!");
    exit(1);
  }
  // at this point, you already have all the input in the buf variable
  for(int i=0; buf[i]; i++) {
    putchar( buf[i] ); // put out the number
    putchar( ' ' ); // put out a space
  } 
  putchar( '\n' ); // make a nice newline
}

如上所述,它允许任何字符,而不仅仅是数字。如果要限制为数字,则可以过滤输入内容,或在for循环中添加一个检查项...取决于您要完成的工作。

答案 2 :(得分:0)

C允许您非常优雅地处理问题的一种方法是通过递归。

考虑一个例程,该例程只知道如何打印数字的最后一位,如果需要,请在其前面加上空格。

void printWithSpaces(int neblod)
{
    // Take everything except the last digit.
    int mene = neblod / 10;
    // Now extract the last digit
    int fhtagn = neblod % 10;

    // Check if there are leading digits
    if (mene != 0)
    {
        // There are, so do some magic to deal with the leading digits
        // And print the intervening space.
        putchar(' ');
    }
    putchar(fhtagn + '0');
}

好。这样很好,除了我们可以用来“做一些魔术来处理前导数字”之外?

我们不只是将它们打印为带有适当中间空格的数字序列吗?

不是void printWithSpaces(int neblod)那样吗?

因此,我们进行了一项更改:

void printWithSpaces(int neblod)
{
    // Take everything except the last digit.
    int mene = neblod / 10;
    // Now extract the last digit
    int fhtagn = neblod % 10;

    // Check if there are leading digits
    if (mene != 0)
    {
        // There are, so print them out
        printWithSpaces(mene);
        // And print the intervening space.
        putchar(' ');
    }
    putchar(fhtagn + '0');
}

您完成了。

出于好奇,下面有关C递归的文章可能既有趣,又对我稍微不寻常的变量名选择有所了解。 ;)http://www.bobhobbs.com/files/kr_lovecraft.html