zoukankan      html  css  js  c++  java
  • 大数相加 用栈

    #include "StdAfx.h"
    
    
    
    
    using namespace std;
    
    
    const int Maxn = 1000+10;
    
    
    
    #define DATA char
    
    typedef struct _STACKNODE_
    {
         DATA* Data;
        _STACKNODE_* Next;
        void InitMember()
        {
            Next = NULL;
            Data = NULL;
        }
    }STACKNODE,*PSTACKNODE,**PPSTACKNODE;
    
    
    typedef struct _STACK_
    {
        PSTACKNODE Head;
        PSTACKNODE Tail;
        int iCount;
        void InitMember()
        {
            Head = Tail = NULL;
            iCount = 0;
        }
    }STACK,*PSTACK;
    
    bool InStack(PSTACK Stack,DATA Data);
    
    bool OutStack(PSTACK Stack,DATA* Data);
    
    bool IsEmpty(PSTACK Stack);
    
    
    bool GetTop(PSTACK Stack,DATA* Data);
    
    
    
    
    
    int main()
    {
        int i = 0;
        int n = 0;
        DATA Data  = '0';
        STACK Stack1 ;
        STACK Stack2 ;
        STACK Stack3;
        Stack1.InitMember();
        Stack2.InitMember();
        Stack3.InitMember();
        cout << "输入数字的位数" << endl;
        cin >> n;
        for (i = 0;i<n;i++)
        {
            cin >> Data;
            InStack(&Stack1,Data-'0');
        }
        cout << "输入数字的位数" << endl;
        cin >> n;
        for (i = 0;i<n;i++)
        {
            cin >> Data;
            InStack(&Stack2,Data-'0');
        }
        Data = 0;
        while (!IsEmpty(&Stack1)||!IsEmpty(&Stack2))
        {
            DATA DataTemp = '0';
            DATA DataTemp1 = '0';
            DATA DataTemp2 = '0';
            GetTop(&Stack1,&DataTemp1);
            GetTop(&Stack2,&DataTemp2);
            OutStack(&Stack1,&DataTemp1);
            OutStack(&Stack2,&DataTemp2);
            DataTemp = (DataTemp1+DataTemp2+Data)%10;
            Data = (DataTemp1+DataTemp2+Data)/10;
            InStack(&Stack3,DataTemp);
             
        }
        if (Data>0)
        {
            cout << 1 ;
        }
        while (!IsEmpty(&Stack3))
        {
            OutStack(&Stack3,&Data);
            printf("%d",Data);
        }
        cout << endl;
        return 0;
    }
    bool InStack(PSTACK Stack,DATA Data)
    {
        PSTACKNODE Node = (PSTACKNODE)malloc(sizeof(PSTACKNODE));
        if (Node==NULL)
        {
            return false;
        }
        else 
        {
            Node->InitMember();
            Node->Data = (DATA*)malloc(sizeof(DATA));
            if (Node->Data==NULL)
            {
                return false;
            }
            memcpy((Node->Data),&Data,sizeof(DATA));
            
            if (Stack->iCount==0)
            {
                Stack->Head = Stack->Tail = Node;
            }
            else 
            {
                Stack->Head->Next = Node;
                Stack->Head = Node;
            }
            Stack->iCount++;
        }
        return true;
    }
    
    
    bool IsEmpty(PSTACK Stack)
    {
        if (Stack->iCount==0)
        {
            return true;
        }
        return false;
    }
    
    bool OutStack(PSTACK Stack,DATA* Data)
    {
        if (IsEmpty(Stack))
        {
            return false;
        }
        memcpy(Data,Stack->Head->Data,sizeof(DATA));
        free(Stack->Head->Data);
        PSTACKNODE PreNode = Stack->Tail;
        PSTACKNODE Node = Stack->Head;
        if (Stack->iCount!=1)
        {
            while (true)
            {
                if (PreNode->Next==Stack->Head)
                {
                    break;
                }
                PreNode = PreNode->Next;
            }
            Stack->Head = PreNode;
        }
        Stack->iCount--;
         
        return true;
        
        
    }
    
    bool GetTop(PSTACK Stack,DATA* Data)
    {
        if (IsEmpty(Stack))
        {
            return false;
        }
        memcpy(Data,Stack->Head->Data,sizeof(DATA));
        return true;
    } 
     
    爱程序 不爱bug 爱生活 不爱黑眼圈 我和你们一样 我和你们不一样 我不是凡客 我要做geek
  • 相关阅读:
    听说这是互联网时代100本必读书单,你看过几本?
    HttpURL连接远程serverGet和Post方式请求并返回数据
    如何才干高速成为优秀的程序猿
    android学习笔记NO.5
    Linux 内核开发
    scikit-learn:3.3. Model evaluation: quantifying the quality of predictions
    多个client与一个server端通信的问题
    [Android Studio] 取消引用库打包出现异常-- provided dependencies can only be jars
    2016.3.16__CSS3_选择器_边框_背景_蒙版mask__第九天
    Android Studio:Multiple dex files define Landroid/support/annotation/AnimRes
  • 原文地址:https://www.cnblogs.com/yifi/p/4544986.html
Copyright © 2011-2022 走看看