以垂直格式显示数字

时间:2014-10-04 22:56:02

标签: c

我是C的新手。我有一个课程作业,以垂直格式显示一个数字。如果用户输入5678,教师希望它在一列中垂直显示在屏幕上:

8
7
6
5

赋值的第二部分是找到相同数字的最大除数。 我完全迷失了。我从另一个函数中获取NUM值。公式似乎适用于偶数,但奇数。

int divisor (int NUM)

{
int index, count=0;

  for(index=2;index<=(NUM/2);index=index+1)
        {
        if(NUM%index==0)
         count++;
        }
  printf("\n\nThe largest divisor of %d is %d\n",NUM, index-1);
  return(index);
}

2 个答案:

答案 0 :(得分:1)

要垂直显示数字:

1. get least significant digit,
2. print it and print new line,
3. shift number to the right by one digit
4. goto 1

算法在数字为零时终止。拨打输入号码n;获得最不重要(最右边)的数字可以使用n % 10完成。可以使用n = n / 10进行右移。

对于第二部分,观察最大除数不能超过n/2(因为n = 2 * n/2)。所以尝试从n/21的所有数字,并在找到除数后中断。您将找到最大的除数,因为您正在按降序排列数字。要检查x除以y是否使用y % x == 0

检查从sqrt(n)1的数字的第二种方法。如果m除以n,我们可以为某些n = m * k撰写k。现在你拿max(m, n/m)继续。

希望这会有所帮助:)

答案 1 :(得分:-1)

对于第一部分,有很多方法可以解决这个问题。但是,如果不使用太多标准库函数,这似乎是一个适合该问题的级别,我认为最简单的方法是将数字作为字符数组。然后通过字符数组中的索引访问每个值。这只需要stdio.h头文件。一些快速说明:只需使用printf打印每个索引中包含的值,并在结尾处抛出换行符\ n字符。如果你想将字符串转换为整数,你可以使用atd()函数很容易地做到这一点,该函数可以在stdlib.h中找到。如果要向后打印,可以简单地向后遍历数组。

void displayvert(char str[])
{ 
  int i;

  for (i = 0; str[i] != '\0'; ++i) {
    printf("%c\n", str[i]);
  }

}

接近第二个问题的方法也很多,但在第二个问题的情况下,我认为我会使用模数运算符并跟踪结果为零的最高值。为了使用单用户提供的输入,我实际上需要在stdlib.h头文件中的atoi()。基本上,从值1开始,您将值增加到刚好低于'num'本身值的整数。并且,如果当你除以它时的余数为零(使用模数运算符的目的),那么你知道它是可分的。因为我们从1升到数字本身,所以返回零余数的最后一个值是最大公约数。

void getgcd(int num)
{
  int i, gcd;

  // remember, you can't do x % 0!                                                               
  for (i = 1; i < num; i++) {
    if ((num % i) == 0 ) {
      gcd = i;
    }
  }

  printf("The greatest common divisor is: %d\n", gcd);
}

这里有主要功能和原型,因此您可以看到它们是如何捆绑在一起的。一些快速笔记(1)11位是任意的;但重要的是要注意我们使用10位数作为总输入值(您可以添加检查以强制执行)并保留第11位(在索引10处)以允许空终止字符\ 0。 (2)使用scanf抓取输入;请注意,因为字符数组不需要地址运算符&amp;因为它默认为那个。

#include <stdio.h>
#include <stdlib.h>

void displayvert(char str[]);
void getgcd(int num);

int main()
{ 
  char input[11]; // additional character added for \0                                           

  printf("Please enter a value up to 10 digits: ");
  scanf("%s", input);
  displayvert(input);
  getgcd(atoi(input));

  return 0;
}