2014-10-04 44 views
-3

我是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); 
} 
+0

这个帖子中没有问题。很难回答。 – chux 2014-10-04 23:06:48

+0

'count ++;' - >'largest_divisor = index;' – BLUEPIXY 2014-10-04 23:08:04

回答

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之间的所有数字,并在找到除数后再打破。你会找到最大的除数,因为你正在考虑数字按递减顺序。检查xy使用y % x == 0

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

希望这会有所帮助:)

-1

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

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

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

} 

也有许多方法来处理第二,但在这种情况下,对于第二个问题,我想我会使用模运算符和跟踪,结果就是零的最高值。为了使这与单用户提供的输入一起工作,我实际上需要atoi(),它位于stdlib.h头文件中。基本上,从值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抓取输入;请注意,因为字符数组不需要地址运算符&,因为它缺省为。

#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; 
}