| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 554 人关注过本帖
标题:新手问个问题!求高手解答!
只看楼主 加入收藏
名字五个字
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-10-15
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
新手问个问题!求高手解答!
编程实现可以用于如
99999999999999999999999999999999999999999999999
+
99999999999999999999999999999999999999999999999
这样之类的超长数的加法
上面的数字只是参考
就是说此类的超长的数
要求短数业对才行
搜索更多相关主题的帖子: 解答 
2010-10-15 11:48
小小熊宝宝
Rank: 2
来 自:江苏无锡
等 级:论坛游民
威 望:2
帖 子:183
专家分:38
注 册:2008-8-12
收藏
得分:0 
可以用指数形式或者unsigned long long

[ 本帖最后由 小小熊宝宝 于 2010-10-15 11:56 编辑 ]

欢迎加入C语言交流群:43287755
2010-10-15 11:54
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:20 
程序代码:
#include<stdio.h>
#define maxlen 50
typedef int elemtype;
typedef elemtype sqlist[maxlen];
int input(sqlist A)
{
    int i;
    for(i=0;i<maxlen;i++)
    A[i]=0;
    printf("请输入数据:\n");
    printf("请输入一个正整数的各位(以-1为结束符):\n");
    i=0;
    while(1)
    {
        scanf("%d",&A[i]);
        if(A[i]<0)
            break;
        i++;
    }
    return i;
}
void output(sqlist A,int low,int high)//输出顺序表中的值
{
    int i;
    for(i=low;i<high;i++)
    printf("%d",A[i]);
    printf("\n");
}
void move(sqlist A,int na)//把线性表中的元素一道后面
{
    int i;
    for(i=0;i<na;i++)
    A[maxlen-i-1]=A[na-i-1];
}
int add(sqlist A,int na,sqlist B,int nb)
{
    int nc,i,j,len;
    if(na>nb)
        nc=na;
    else
        nc=nb;
    move(A,na);
    move(B,nb);
    for(i=maxlen-1;i>=maxlen-nc;i--)
    {
        j=A[i]+B[i];
        if(j>9)
        {
            A[i-1]=A[i-1]+1;
            A[i]=j-10;
        }
        else
            A[i]=j;
        if(i==(maxlen-nc))
        {
            if(j>9)
            {
                A[i-1]=1;
                len=nc+1;
            }
            else
                len=nc;
        }
    }
    return len;
}
void main()
{
    sqlist A,B;
    int na,nb,nc;
    na=input(A);
    nb=input(B);
    printf("整数A:");
    output(A,0,na);
    printf("整数B:");
    output(B,0,nb);
    nc=add(A,na,B,nb);
    printf("相加:");
    output(A,maxlen-nc,maxlen);
}
这个是我自己做的
2010-10-15 11:57
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int t;
char* getnum(char*p)// 输入字符串
{
    int i=0;

    p=(char*)malloc(sizeof(char));//开辟一个区间先
    while ((p[i++]=getchar())!='\n')//判断 并 输入p[i]
    {
        p=(char*)realloc(p,(i+1)*sizeof(char));//
    }
    p[i]='\0';  //把最后一项 变成'\0’  这个我还是不懂
    printf("验证i=%d\n",i);//验证1
    printf("%d\n",p[i-1]);
    return p;
}
int* bigadd(int*num,char*p1,char*p2)//相加
{
    int n=0;
    int ch1_n,ch2_n;
    ch1_n=strlen(p1);//判断p1的长度   减去多分配的一个区间
    ch2_n=strlen(p2);//判断p2的长度   减去最后那个多余无值区间
    num=(int*)malloc(sizeof(int));
    while (ch1_n>=0||ch2_n>=0)
    {
        --ch1_n; //其实这个判断可以省略
        --ch2_n;
        printf("ch1_n=%d\n",ch1_n);
        printf("ch2_n=%d\n",ch2_n);
        if (ch1_n>=0&&ch2_n>=0) num[n]=(p1[ch1_n]-'0')+(p2[ch2_n]-'0');//如果两个都还有数没有加
        printf("num[0]=%d\n",num[0]);
        if (ch1_n<0&&ch2_n>=0)num[n]=p2[ch2_n]-'0';//如果p1已经取完数
        if(ch1_n>=0&&ch2_n<0)num[n]=p1[ch1_n]-'0'; //p2取完数
        num=(int*)realloc(num,(n+2)*sizeof(int));//只要两个不同时已经取完数 就要继续分配一个区间,那么最后有一个多余
        n++;  
    }
    t=n-1;    /
    printf("n=%d\n",n);//验证2
    num[t]=0;//把最后那区域赋值给0  预防上一位也要进位
   
    //先记下num一共多少位。
    return num;
    }
int* carry(int*num)  //进位
{   int n=0;
    for ( n=0;n<=t;) //从第一位开始到第t位 一直进位  帮我看看这个n<=t 有没有错
    {
        while (num[n]>=10)//当num的值大于10时候
        {
            num[n++]-=10;//  num自减10;
            num[n]+=1;//   下一位数+1;
            continue;
        }
        n++;//判断下一位数
    }
    return num;  //返回num指针
}
void printnum(int*num)//输出num的数组
{
        t=(num[t]==0)?t-1:t;
        while(t>0)      
        {printf("%d",num[t]);
          t--;
        }
}
main()
{
    int *num;
    char*p1,*p2;
    p1=getnum(p1);
    p2=getnum(p2);
    num=bigadd(num,p1,p2);
    printnum(carry(num));
}
这是论坛里的另外一个人做的
2010-10-15 11:58
Crocodile_JX
Rank: 5Rank: 5
等 级:职业侠客
帖 子:161
专家分:335
注 册:2010-9-13
收藏
得分:0 
这个要用栈的思想。
2010-10-15 13:56
cacker
该用户已被删除
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2010-10-15 14:02
快速回复:新手问个问题!求高手解答!
数据加载中...
 
   



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

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