对于第一部分,有很多方法可以解决这个问题。但是,如果不使用太多的标准库函数,这些函数似乎是适合这个问题的级别,我认为最简单的方法是将数字作为字符数组。然后通过字符数组中的索引访问每个值。这只需要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;
}
这个帖子中没有问题。很难回答。 – chux 2014-10-04 23:06:48
'count ++;' - >'largest_divisor = index;' – BLUEPIXY 2014-10-04 23:08:04