输入数字极大且要求对每一位进行处理怎么办

当题目要求输入一个极其长的数字时,例如一个一千位的数,并要求能够对每一位数字进行操作,一般这种情况怎么处理呀(位数也有可能很小)
用代码块功能插入代码,请勿粘贴截图
运行结果及报错内容
1.我首先想设置一个char类型的数组,再通过ASCII码转换为单个的数字进行操作,但是编译器要求我必须给出这个存储空间的大小,我觉得应该会栈溢出(不太懂),而且直接搞一个这么大的数组会不会太浪费空间啊,还有一点很烦人的就是,当我用指针指向这个数组的时候,我对指针进行加一操作后,指针所指向的内容就会变得莫名其妙。

2.然后我想用指针,但是int类型的指针在输入的时候不能一次型输入,得用空格或者逗号,就无法满足题干一次性输入的条件。
3.我于是使用string 类,虽然可以一次性输入并且单独对位数进行操作,但是我不明白怎么对他进行整数类型的转换和判断,实现把字符当作整数来使用的目的
4.最后,我想使用申请内存,同样困扰我的是,直接申请一个如此大的空间会不会有些浪费,而且有些在我电脑上可以运行的代码,在PTA上就会提示段错误

我感觉我对char和string还是很不能理解,希望有人帮忙解一下疑惑

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

typedef struct Node {
    int data;
    struct Node *next;
} Node;

Node *create_node(int data) {
    Node *node = (Node*)malloc(sizeof(Node));
    node->data = data;
    node->next = NULL;
    return node;
}

int main() {
    // 创建一个空的链表,表示一个数字
    Node *head = NULL;

    // 向链表中插入数字的每一位
    head = create_node(1);
    head->next = create_node(2);
    head->next->next = create_node(3);
    head->next->next->next = create_node(4);

    // 输出链表中的数字
    Node *curr = head;
    while (curr != NULL) {
        printf("%d ", curr->data);
        curr = curr->next;
    }

    // 释放内存
    while (head != NULL) {
        Node *temp = head;
        head = head->next;
        free(temp);
    }

    return 0;
}