删除重复的数字并使用堆栈打印(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。您应该考虑使用 long
或 long long
来进行测试 运行.
This 可能会有帮助。
在您的解决方案中,您已将 num
声明为 int
,它最多只能保存 -2147483648 到 2147483647 范围内的值。根据您输入的 7777777777777777 大于限制。所以,这就是数据没有正确存储的原因。同样,程序的结果输出也不正确。
您可以使用 long
或 long long
数据类型最多可以容纳 -(2^63) 到 (2^63)-1 个值范围,这可以解决您的问题。因此,您可以更改数据类型以获得所需的结果。
#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 个值范围,这可以解决您的问题。因此,您可以更改数据类型以获得所需的结果。