| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1516 人关注过本帖
标题:求助大神 关于长整数的加法问题 编译通过 运行终止 应该是内存或数据溢出问 ...
取消只看楼主 加入收藏
吉吉455
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2016-7-3
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
求助大神 关于长整数的加法问题 编译通过 运行终止 应该是内存或数据溢出问题 但不知道哪里出错
完整代码:
#include<stdio.h>
#include<string.h>
#include<malloc.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define Stack_Size 250
typedef struct{
    int elem[Stack_Size];
    int top;
}SeqStack; //建栈
typedef struct Node{
    int data;
    struct Node *next;
}Node,*BigInteger; //链表
void InitList(BigInteger L)
{
    L=(BigInteger)malloc(sizeof(Node));
    L->next=NULL;
}//初始化链表
void InitStack(SeqStack *S)
{
    S->top=-1;
}    //栈初始化
int IsEmpty(SeqStack *S)
{
    return(S->top==-1? TRUE:FALSE);
} //判栈空
int IsFull(SeqStack *S)
{
    return(S->top == Stack_Size-1? TRUE:FALSE);
}   //判栈满
int Push(SeqStack *S,int x)
{
    if(S->top == Stack_Size-1)return(FALSE);//栈已满
    S->top++;
    S->elem[S->top]=x;
    return(TRUE);
} //入栈
int Pop(SeqStack *S,int *x)
{
    if(S->top==-1)
    return(FALSE);
    else
    {
        *x=S->elem[S->top];
        S->top--;
        return(TRUE);
    }
} //出栈
BigInteger CreateBigInteger(char *str)
{/*函数功能:把由数字组成的字符串str转化为单链表,从字符串右边开始每4位,创建一个结点,直到字符串的最左边。*/
BigInteger L,p,q;
    int n,i,x,a,b;
n=strlen(str);//统计字符串str的长度n;
 InitList(L);
L->data=0;
i=n-1;
     while(i>=0)
     {
      for(x=0,a=4,b=1;a&&(i>=0);i--,a--,b*=10)   x=b*(str[i]-'0')+x;
      p=(Node*)malloc(sizeof(Node));
      q=(Node*)malloc(sizeof(Node));
      p->data=x;
q->data = x;
q->next = p;
q = p;
q->next = NULL;
}
L->next = q;
return L ;
}
BigInteger AddBigIntege (BigInteger L1,BigInteger L2)
{/*创建一个单链表用于存放L1+L2,并将该单链表作为函数值返回*/
    Node *L,*p,*q1,*q2;
     InitList(L);
     InitList(p);
     InitList(q1);
     InitList(q2);
    int x,carry;/*carry为进位*/
    L->next=NULL;L->data=0;
    q1=L1->next;
    q2=L2->next;
    carry=0;
while(q1&&q2){ /*两者均未到尾部*/
      x=q1->data+q2->data+carry;   
        if(x>10000)
        {carry=1;p->data=x-10000;}
        else
        {carry=0;p->data=x;}
        L->next=p;
        p=p->next;
        q1=q1->next;
        q2=q2->next;
    }
while(q1)
{
    x=q1->data+carry;
        if(x>10000)
        {carry=1;p->data=x-10000;}
        else
        {carry=0;p->data=x;}
        L->next=p;
        p=p->next;
        q1=q1->next;
}
while(q2)
{
    x=q2->data+carry;
        if(x>10000)
        {carry=1;p->data=x-10000;}
        else
        {carry=0;p->data=x;}
        L->next=p;
        p=p->next;
        q2=q2->next;
}
if (carry){
    p->data=carry;
    L->next=p;
    p=p->next;
    }
return L;   
}
int PrintBigInteger (BigInteger L)
{
    int x;
    SeqStack *S;
    InitStack(S);
    while(L)
    {
        L=L->next;
    Push(S,L->data);
    }
    while(S)
    {
    Pop(S,&x);
    if(x<1000)
    printf("0d%,",x);
else if(x==0)
    printf("0000,",x);
else if(x>1000)   
    printf("d%,",x);
    }
}
 int main()
 {
     BigInteger L1,L2;
     InitList(L1);
     InitList(L2);
     char ch[250],cj[250];
     scanf("%s",&ch);
     scanf("%s",&cj);
     L1=CreateBigInteger(ch);
     L2=CreateBigInteger(cj);
     //PrintBigInteger(AddBigIntege(L1,L2));
     return 0;
 }
help me!!!
搜索更多相关主题的帖子: 下载次数 include 
2016-07-03 19:52
吉吉455
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2016-7-3
收藏
得分:0 
回复 2楼 吹水佬
大整数的加法
2016-07-03 22:26
吉吉455
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2016-7-3
收藏
得分:0 
回复 2楼 吹水佬
是正整数的加法
2016-07-03 22:29
吉吉455
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2016-7-3
收藏
得分:0 
回复 9楼 azzbcc
这个问题已解决,现在是运行结果不对
2016-07-04 13:39
吉吉455
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2016-7-3
收藏
得分:0 
现在能运行了,但运行结果不对,而且遇到9999+9999时程序又不能运行了
2016-07-04 13:40
吉吉455
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2016-7-3
收藏
得分:0 
回复 7楼 八画小子
是啊,我比较急
2016-07-04 13:41
快速回复:求助大神 关于长整数的加法问题 编译通过 运行终止 应该是内存或数据溢 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.052176 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved