如何解决删除重复的数字并使用堆栈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。您应该考虑使用long
或long long
来运行测试。
This可能会有帮助。
,在您的解决方案中,您已将num
声明为int
,它只能容纳最大范围为-2147483648至2147483647的值。根据您的输入7777777777777777大于限制。因此,这就是数据未正确存储的原因。因为,该程序的结果输出也不正确。
您可以使用long
或long long
数据类型,最多可容纳-(2 ^ 63)至(2 ^ 63)-1范围内的值,可以解决您的问题。因此,您可以更改数据类型以获得所需的结果。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。