c - 使用 C 语言动态数组与普通数组查找 Kaprekar 常数

标签 c loops

下面的程序打印到达 Kaprekars Constant 的时间数 我不明白为什么当我使用普通数组时它会无限循环运行 当我使用动态数组时它会起作用,正如我在评论中所写的那样。

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

#define size 4

void KaprekarsConstant(int num) {
    //int *arr;
    int j, i, temp, sorted, counter = 0, rev;
    while (num != 6174) {
        int arr[3] = { 0 };
        //arr = (int*)calloc((size - 1), sizeof(int));
        for (i = 0; num != 0; i++) {
            arr[i] = num % 10;
            num /= 10;
        }
        for (i = 1; i < size; i++) {
            for (j = i - 1, temp = arr[i]; (temp < arr[j]) && (j >= 0); j--) {
                arr[j + 1] = arr[j];
            }
            arr[j + 1] = temp;
            j++;
        }
        for (i = 0, sorted = 0; i < size; i++) {
            sorted = arr[i] + (sorted * 10);
        }
        for (i = size - 1, rev = 0; i >= 0; i--) {
            rev = arr[i] + (rev * 10);
        }
        num = abs(rev - sorted);
        counter++;
    }
    //free(arr);
    printf("%d\n", counter);
}

int main(void) {
    KaprekarsConstant(2111); //print 5
    return 0;
}

最佳答案

您的代码在这两种情况下都有未定义的行为,因为您访问和修改的 arr 超出了其边界:arr 的定义或分配大小为 3 但您访问并修改了第四个元素 arr[3]

将标识符size重新定义为宏非常容易出错。您至少应该使用 SIZENUMBER_SIZE

关于c - 使用 C 语言动态数组与普通数组查找 Kaprekar 常数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52375763/

相关文章:

java - JNI - 带有 ByteBuffer 参数的 native 方法

c - 为什么卷积函数不打印?

php - 一种跳过已经显示的行的方法

javascript - 只有最后一次循环迭代才能成功注册我的点击事件?

c - 在 C 中,NULL 指针和指向 0 的指针有区别吗?如果是这样,什么?

c - 使用PACKET_MMAP和PACKET_TX_RING发送数据比 “normal”慢(无)

c - C中的多维数组程序中的错误

Python:使类可迭代

java - 如何使循环运行与用户输入一样多的次数?

javascript - 输入到文本字段的一系列数字的总和和平均值