| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1266 人关注过本帖
标题:用单链表来实现任意长度的任意个数相加,急需。
只看楼主 加入收藏
丢了幸福
Rank: 2
等 级:论坛游民
帖 子:44
专家分:10
注 册:2010-7-24
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:10 
用单链表来实现任意长度的任意个数相加,急需。
用单链表来实现任意长度的数相加。
搜索更多相关主题的帖子: 单链 长度 相加 
2010-08-13 19:01
丢了幸福
Rank: 2
等 级:论坛游民
帖 子:44
专家分:10
注 册:2010-7-24
收藏
得分:0 
稍微详细点啊,本人刚接触数据结构,很多都不是太会,谢谢了。
2010-08-13 19:03
丢了幸福
Rank: 2
等 级:论坛游民
帖 子:44
专家分:10
注 册:2010-7-24
收藏
得分:0 
怎么没人呢?
2010-08-13 19:59
jack10141
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:陕西西安
等 级:小飞侠
威 望:6
帖 子:706
专家分:2271
注 册:2010-8-10
收藏
得分:10 
大数相加?这个简单啊!但是任意长度,这就有点夸张了,内存总是有限制的呢!不可能是任意长度,太长了,内存很难放得下吧?所以,“任意”还是要有范围的!!!

Coding就像一盒巧克力,你永远不会知道你会遇到什么BUG
别跟我说你是不能的,这让我愤怒,因为这侮辱了你的智慧
2010-08-13 22:40
丢了幸福
Rank: 2
等 级:论坛游民
帖 子:44
专家分:10
注 册:2010-7-24
收藏
得分:0 
回复 4楼 jack10141
可以自己稍微限制点啊!
#include<stdio.h>
#include<stdlib.h>

typedef struct node
{
    char data;
    struct node *pnext;
}Node,*PNode;

void creat_list(PNode *pphead)
{
    PNode ptemp,ptail;
    ptemp=ptail=NULL;
    int input=0,i=0;
    while(1)
    {
        scanf("%c",&input);
        if (input=='\n')
        {
            break;
        }
        ptemp=(PNode)malloc(sizeof(Node));
        if ( NULL == ptemp)
        {
            printf("create_list1开辟结点出错\n");
        }
        ptemp->data=input;
        ptemp->pnext=NULL;
        if(*pphead==NULL)
        {
            ptail=*pphead=ptemp;
        }
        else
        {
            ptail->pnext=ptemp;
            ptail=ptemp;
        }
    }
}


void Reverse(PNode *pphead)
{
    PNode p1,p2;
    p1=*pphead;
    *pphead=NULL;
    while(p1!=NULL)
    {
        p2=p1->pnext;
        p1->pnext=*pphead;
        *pphead=p1;
        p1=p2;     
    }
}


void DumpList(PNode phead)
{
    while(phead!=NULL)
    {
        printf("%c",phead->data);
        phead=phead->pnext;
    }
    printf("\n");
}


PNode Add(PNode phead1,PNode phead2)
{
    int carry_flag=0;
    PNode phead3,*pr=NULL;
    char pt;
    for(;phead1!=NULL&&phead2!=NULL;phead1=phead1->pnext,phead2=phead2->pnext)
    {
            printf("hello\n");
            pt=phead1->data+phead2->data+carry_flag-48;
            printf("1");
            if(pt>=58)
            {
                pt=pt-10;
                carry_flag=1;
                printf("1");
            }
            else
            {
                carry_flag=0;
                printf("2");
            }
            //phead3=phead3->pnext;
            phead3=(PNode)malloc(sizeof(Node));
            phead3->data=pt;
            phead3->pnext=NULL;
            *pr=phead3;
            pr=&(*pr)->pnext;
    }
    /*
    if(phead1==NULL&&phead2!=NULL)
    {
        while(phead2!=NULL)
        {
        pt=phead2->data+carry_flag;
        if(pt>=58)
        {
            pt=pt-10;
            carry_flag=1;
        }
        else
        {
            carry_flag=0;
        }
        phead2=phead2->pnext;
        //phead3=phead3->pnext;
        phead3=(PNode)malloc(sizeof(Node));
        phead3->data=pt;
        phead3->pnext=NULL;
        *pr=phead3;
        pr=&(*pr)->pnext;
        }
    }
    else if(phead1!=NULL&&phead2==NULL)
    {
        while(phead1!=NULL)
        {
        phead3=(PNode)malloc(sizeof(Node));
        phead3->data=phead1->data+carry_flag;
        if(phead3->data>=58)
        {
            phead3->data=phead3->data-10;
            carry_flag=1;
        }
        else
        {
            carry_flag=0;
        }
        phead1=phead1->pnext;
        //phead3=phead3->pnext;
        phead3->pnext=NULL;
        *pr=phead3;
        pr=&(*pr)->pnext;
        }
    }
    else  if(phead1==NULL&&phead2==NULL)
    {
        phead3=(PNode)malloc(sizeof(Node));
        if(carry_flag==1)
        phead3->data=carry_flag+48;
    }
    Reverse(&phead3);
    return phead3;*/
}
        
            
   
int main( )
{
    PNode phead1,phead2,phead3;
    phead1=phead2=phead3=NULL;
    printf("please input the data to the list1\n");
    creat_list(&phead1);
    DumpList(phead1);
    Reverse(&phead1);
    DumpList(phead1);
    printf("please input the data to the list2\n");
    creat_list(&phead2);
    DumpList(phead2);
    Reverse(&phead2);
    DumpList(phead2);
    phead3=Add(phead1,phead2);
    DumpList(phead3);
   
    return 0;
}


我的这个程序是怎么回事啊?帮我看哈啊!
2010-08-14 08:38
aizuoai123
Rank: 2
等 级:论坛游民
帖 子:44
专家分:36
注 册:2010-5-14
收藏
得分:5 
void Reverse(PNode *pphead)
{
    PNode p1,p2;
    p1=*pphead;
    *pphead=NULL;
    while(p1!=NULL)
    {
        p2=p1->pnext;
        p1->pnext=*pphead;
        *pphead=p1;
        p1=p2;     
    }
}
这是什么函数?
2010-08-14 10:33
jack10141
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:陕西西安
等 级:小飞侠
威 望:6
帖 子:706
专家分:2271
注 册:2010-8-10
收藏
得分:0 
以下是引用aizuoai123在2010-8-14 10:33:25的发言:

void Reverse(PNode *pphead)
{
    PNode p1,p2;
    p1=*pphead;
    *pphead=NULL;
    while(p1!=NULL)
    {
        p2=p1->pnext;
        p1->pnext=*pphead;
        *pphead=p1;
        p1=p2;     
    }
}
这是什么函数?
链表顺序翻转一下!?

Coding就像一盒巧克力,你永远不会知道你会遇到什么BUG
别跟我说你是不能的,这让我愤怒,因为这侮辱了你的智慧
2010-08-14 13:03
jack10141
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:陕西西安
等 级:小飞侠
威 望:6
帖 子:706
专家分:2271
注 册:2010-8-10
收藏
得分:0 
其实你这个问题,如果数字长度不是太长(几万位以下),把对应的数位放到数组中会更方便处理。

Coding就像一盒巧克力,你永远不会知道你会遇到什么BUG
别跟我说你是不能的,这让我愤怒,因为这侮辱了你的智慧
2010-08-14 13:08
okayyyy
Rank: 2
等 级:论坛游民
威 望:2
帖 子:102
专家分:70
注 册:2010-6-15
收藏
得分:5 
造时空穿梭机,任意个数相加;
2010-08-14 13:38
丢了幸福
Rank: 2
等 级:论坛游民
帖 子:44
专家分:10
注 册:2010-7-24
收藏
得分:0 
回复 8楼 jack10141
我们老师规定放在链表里计算。我真不知道错在哪。
2010-08-14 16:41
快速回复:用单链表来实现任意长度的任意个数相加,急需。
数据加载中...
 
   



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

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