删除重复的数字并使用堆栈打印(C 程序)

remove repeated digits and print using stack (C program)

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

struct Stack{
    int data;
    struct Stack *next;
};
 
struct Stack* newNode(int number){
     
     struct Stack *node=(struct Stack*)malloc(sizeof(struct Stack));
     node->data=number;
     node->next=NULL;
     return node;
 }
  void push(struct Stack **root_ref,int number){
      struct Stack *node=newNode(number);
      node->next=*root_ref;
      *root_ref=node;
      }
      
    int pop(struct Stack **root_ref){
        struct Stack *temp=*root_ref;
        int number=temp->data;
        *root_ref=(*root_ref)->next;
        free(temp);
        return number;
    }
    
  bool empty(struct Stack *root){
      
      return root==NULL;
  }
  
  int top(struct Stack *root){
      return root->data;
  }
 
 int main() {
    //code
    

    
    int t,num;
    scanf("%d",&t);
    while(t--){
            struct Stack *root=NULL;
        scanf("%d",&num);
           int rem=num%10;
           num=num/10;
           push(&root,rem);
        while(num!=0){
            rem=num%10;
            if(top(root)!=rem)
            push(&root,rem);
            num=num/10;
        }
       while(!empty(root)){
           printf("%d",top(root));
           pop(&root);
       } 
       
       printf("\n");
    }
    return 0;
}

对于输入:1224,需要输出124,我需要去除重复的数字并打印。 对于测试用例:7777777777777777,输出应该是 7 但我得到的是 2614897 ,有什么问题,有人可以告诉吗? 这是我的代码失败的测试用例。查看其他几个案例:

对于输入: 3(这是测试用例的数量) 1233335 788777 9999

你的输出是: 1235 787 9

为什么我会得到该测试用例的如此奇怪的输出?

您使用错误的数据类型来存储 num。您的整数可能是 32 位,在这种情况下最大值是 +2147483647。您应该考虑使用 longlong long 来进行测试 运行.

This 可能会有帮助。

在您的解决方案中,您已将 num 声明为 int,它最多只能保存 -2147483648 到 2147483647 范围内的值。根据您输入的 7777777777777777 大于限制。所以,这就是数据没有正确存储的原因。同样,程序的结果输出也不正确。

您可以使用 longlong long 数据类型最多可以容纳 -(2^63) 到 (2^63)-1 个值范围,这可以解决您的问题。因此,您可以更改数据类型以获得所需的结果。