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

问题描述

#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范围内的值,可以解决您的问题。因此,您可以更改数据类型以获得所需的结果。