2413780002 发表于 2015-7-5 01:04:09

回复看看

xiaoxiaoluomu 发表于 2015-7-9 11:07:56

多学习点例子,帮助很大!

率性而为33 发表于 2015-8-29 15:46:34

hh

flyword 发表于 2015-9-1 23:26:35

抓紧时间学习

gggrdfxk 发表于 2015-9-3 11:00:44

膜拜膜拜

玄凌 发表于 2015-9-3 13:12:34

33333333333333333333333

231564 发表于 2015-9-7 09:21:37

学习

剑客夜帝 发表于 2015-9-11 19:59:17

{:1_1:}

y290176346 发表于 2015-9-16 15:05:01

感谢小甲鱼老师

预感熄烟 发表于 2015-11-30 21:54:47

小甲鱼,你真好

姜海涛123 发表于 2016-2-1 08:27:37

真的好极了

hnust_wurui 发表于 2016-2-14 09:24:36

99

Leoi_Chan 发表于 2016-3-12 16:54:10

我看看

浅唱丶 发表于 2016-5-20 10:05:58

来学习

SCUT_大土豆 发表于 2016-5-26 21:56:21

#include <stdio.h>
#include <stdlib.h>
#define STACKSIZE 100
#define INIT_STACK_SIZE 10
typedef struct SqStack
{
    char *base;
    char *top;
    int stacksize;
}SqStack;
void InitSqStack(SqStack *s)
{
    s->base=(char*)malloc(STACKSIZE*sizeof(char));
    if(!s->base)
      exit(0);
    s->top=s->base;
    s->stacksize=STACKSIZE;
}
void Push(SqStack *s,char mychar)
{
    if(s->top-s->base==s->stacksize)
    {
      s->base=(char*)realloc(s->base,(STACKSIZE+INIT_STACK_SIZE)*sizeof(char));
      if(!s->base)
            exit(0);
      s->top=s->base+s->stacksize;
      s->stacksize+=INIT_STACK_SIZE;
    }
    *(s->top++)=mychar;
}
void Pop(SqStack *s,char *ch)
{
    if(s->top==s->base)
      exit(0);
    *ch=*(--s->top);
}
int EmptySqStack(SqStack *s)
{
    if(s->top!=s->base)
      return 1;
    else
      return 0;
}
int main()
{
    char a_mychar,b_mychar,c_mychar;
    char a_elem,b_elem,c_elem;
    int temp=0;
    SqStack a,b,c;
    InitSqStack(&a);
    InitSqStack(&b);
    InitSqStack(&c);
   scanf("%c",&a_mychar);
    while(a_mychar!='#')
    {
      Push(&a,a_mychar);
      scanf("%c",&a_mychar);
    }
    fflush(stdin);
    scanf("%c",&b_mychar);
    while(b_mychar!='#')
    {
      Push(&b,b_mychar);
      scanf("%c",&b_mychar);
    }
    while(EmptySqStack(&a)&&EmptySqStack(&b))
    {
      Pop(&a,&a_elem);
      Pop(&b,&b_elem);
      c_mychar=((a_elem-'0')+(b_elem-'0')+temp)%10+'0';
         temp=((a_elem-'0')+(b_elem-'0'+temp))/10;
      Push(&c,c_mychar);
    }
      while(EmptySqStack(&a))
    {
      Pop(&a,&a_elem);
      c_mychar=((a_elem-'0')+temp)%10+'0';
      temp=((a_elem-'0')+temp)/10;
      Push(&c,c_mychar);
    }
    while(EmptySqStack(&b))
    {
      Pop(&b,&b_elem);
      c_mychar=((b_elem-'0')+temp)%10+'0';
         temp=((b_elem-'0')+temp)/10;
      Push(&c,c_mychar);
    }
    if(temp==1)
    Push(&c,'1');
    while(EmptySqStack(&c))
    {
      Pop(&c,&c_elem);
      printf("%c",c_elem);
    }
    return 0;
}
自己实现的代码,希望大家多多交流,欢迎指正{:5_92:}

鱼小鱼c 发表于 2016-5-27 17:18:30

谢谢甲鱼哥

l@x@y 发表于 2016-6-9 13:47:00

{:5_90:}

DAY 发表于 2016-7-6 19:33:06

#include<cstdio>
#include<cstdlib>

typedef int SElemType;
#define MAXSIZE 100000

typedef struct StackNode{
        SElemType data;
        struct StackNode *next;
};

typedef struct LinkStack{
        StackNode *top;
        int count;
};

void initLinkStack(LinkStack *S){
        S->top=NULL;
        S->count=0;
}

void Push(LinkStack *S,SElemType e){
        StackNode *p=(StackNode *)malloc(sizeof(StackNode));
        p->data=e;
        p->next=S->top;
        S->top=p;
        S->count++;
}

void Pop(LinkStack *S,SElemType *e){
        StackNode *p;
        p=S->top;
        *e=S->top->data;
        S->top=S->top->next;
        S->count--;
        free(p);
}

int main()
{
        LinkStack a,b,c;
        char a_t;char b_t;
        int i=0;
        int e,d;
        int t=0;
        initLinkStack(&a);initLinkStack(&b);initLinkStack(&c);
        printf("请输入两个大整数,两数用空格隔开:\n");
        scanf("%s%s",a_t,b_t);
        while(a_t!='\0'){
                Push(&a,a_t-'0');
                ++i;
        }
        i=0;
        while(b_t!='\0'){
                Push(&b,b_t-'0');
                ++i;
        }
        while(a.count && b.count){
                Pop(&a,&e);
                Pop(&b,&d);
                Push(&c,(e+d+t)%10);
                t=(int)((e+d+t)/10);
        }
        while(a.count){
                Pop(&a,&e);
                Push(&c,(e+t)%10);
                t=(int)((e+t)/10);
        }
        while(b.count){
                Pop(&b,&e);
                Push(&c,(e+t)%10);
                t=(int)((e+t)/10);
        }
        printf("计算的结果为:\n");
        if(t>0)printf("%d",t);
        while(c.count){
                Pop(&c,&e);
                printf("%d",e);
        }
        printf("\n");
        return 0;
}
/*
【个人原创】
以链栈的形式实现。。
欢迎大家互相学习*/

Einsteng 发表于 2016-7-10 17:04:47

很喜欢小甲鱼

caopeirui 发表于 2016-7-21 16:15:08

123333333333333
页: 1 2 3 [4] 5 6
查看完整版本: 任意长度的大数加法(栈的应用)