1.试题详情
输入一组整数,输入0结束(这组整数不包含0),输出其中能被n整除的所有整数之和(n为整数,不用考虑n为0的情况),n及这组整数均由键盘输入。首先输入n,再输入一组整数。要求:用函数实现判断一个整数是否能被n整除(不用考虑n为0的情况)。
1.1 输入提示
输入两行,第一行输入n,第二行输入一组整数,以空格隔开,输入数字0结束。
1.2 输出提示
输出其中能被n整除的所有整数之和。
1.3 输入与输出样本
输入:
3
2 3 6 -7 -9 12 0
输出:
12
2.程序运行思路
使用单链表存储输入的若干整数,然后遍历单链表判断每个整数是否能被n整除,并对可以被n整除的数加和。
3.代码实现及运行结果
3.1 代码实现
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int num;
struct node* next;
}array;
array* createnode() {
array* p = (array*)malloc(sizeof(array));
p->num = 0;
p->next = NULL;
return p;
}
array* addnode(array* arr, int num) {
array *p1, *p2;
p1 = arr;
p2 = arr->next;
while(p2 != NULL) {
p1 = p2;
p2 = p2->next;
}
array *p = (array *)malloc(sizeof(array));
p->num = num;
p->next = NULL;
p1->next = p;
return arr;
}
int add(array* arr, int n) {
int value = 0;
for(array* p = arr; p != NULL; p=p->next) {
if(p->num % n == 0)
value += p->num;
}
return value;
}
int main() {
int n, num, value = 0;
array* arr = createnode();
scanf("%d",&n);
while(1) {
scanf("%d",&num);
if(num == 0)
break;
else
arr = addnode(arr, num);
}
value = add(arr, n);
printf("%d",value);
return 0;
}