【发布时间】:2022-01-13 14:53:35
【问题描述】:
我有一个循环来检查传递的参数可以被哪些数字整除。所有符合此条件的数字都将存储在另一个数组中。我该如何设置?
#include <stdio.h>
void primfaktorzerlegung(int * zahl, int * ausgabe){
int array_primzahlen[] = {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97};
int length = sizeof(array_primzahlen)/sizeof(int);
int i = 0;
int j = 0;
for(int k = 0; k<*zahl; k++){
for( i = length; i>=0; i--){
if(*zahl % array_primzahlen[i] == 0){
*(ausgabe + j) = array_primzahlen[i];
j++;
*zahl = *zahl / array_primzahlen[i];
}
if(*zahl == 2){
*(ausgabe + j) = array_primzahlen[i];
}
}
}
}
int main(void)
{
int ausgabe[10];
int zahl = 8;
primfaktorzerlegung(&zahl, ausgabe);
for(int i = 0; i<10; i++){
printf("%d, ", ausgabe[i]);
}
return 0;
}
这是我目前的状态。 “数字” 8 将被分解为其素数,即:2, 2, 2 这也有效,但数组中也存储了完全不同的数字:
2, 2, 2, 21883, 0, 0, -1385004928, 21883, 738867344, 32765
【问题讨论】:
-
到目前为止你尝试过什么?
-
你的意思是像
ausgabe[j++] = array_primzahlen[i];这样的东西吗?如果zahl可以被同一个质数多次整除,预期的行为是什么? -
是的,我尝试使用第二个循环存储在 ausgabe 中,但效果不佳
-
有了
for( i = length; i>=0; i--),你就有了UB(未定义的行为)。您从一个 超出 数组末尾的索引开始。你可能想要:for( i = length - 1; i>=0; i--) -
您的格式无处不在。请编辑帖子并修复代码格式。