博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【C】两个大数相加
阅读量:7224 次
发布时间:2019-06-29

本文共 1546 字,大约阅读时间需要 5 分钟。

思想:大数超出了计算机的整形表示范围,故一般用字符串记录,两个大数相加就不能简单的用“+”进行运算,得绕个弯。先把字符串转成int数组(借助与字符'0'的差来实现),每位都放在数组中,然后对数组进行按位加。

#include <iostream>

using namespace std;
const int maxnum=20;
void charTnum(int* intab,char *charab,int len)//字符串转整形,高低位倒置
{
    int i=0;
    for (i=0;i<len;i++)
    {
        intab[len-1-i]=charab[i]-'0';
    }
}
void initABAns(int* ia,int* ib,int *ians)//数组全置0
{
    int i=0;
    for (i=0;i<maxnum;i++)
    {
        ia[i]=0;ib[i]=0;
    }
    for (i=0;i<maxnum+1;i++)
    {
        ians[i]=0;
    }
}
void BigNumAdd(char* ca,char* cb,int* ians)//示意:ans=a+b
{
    int alen=strlen(ca),blen=strlen(cb);
    int* ia,*ib,maxlen=0;int i=0;
    ia=(int*)malloc(maxnum*sizeof(int));
    ib=(int*)malloc(maxnum*sizeof(int));
    initABAns(ia,ib,ians);
    charTnum(ia,ca,alen);
    charTnum(ib,cb,blen);
    if (alen>blen)
        maxlen=alen;
    else
        maxlen=blen;
    for (i;i<maxlen;i++)//数组相加,结果放ians
    {
        ians[i]=ia[i]+ib[i]+ians[i];
        if(ians[i]>9)
        {
            ians[i]=ians[i]-10;
            ians[i+1]++;
        }
    }
    free(ia);
    free(ib);
}
void main()
{
    char *ca,*cb;
    int* ians,maxlen=0;
    ca=(char*)malloc(maxnum*sizeof(char));
    cb=(char*)malloc(maxnum*sizeof(char));
    ians=(int*)malloc((maxnum+1)*sizeof(int));
    printf("请输入加数a  :");
    scanf("%20s",ca);//这个'20'很鸡肋,最好用maxnum,但不知道怎么写这行代码
    printf("请输入被加数b:");
    scanf("%20s",cb);
    printf("\n");
    printf("输出结果为:");
    BigNumAdd(ca,cb,ians);
    int alen=strlen(ca),blen=strlen(cb);
    if (alen>blen)
        maxlen=alen;
    else
        maxlen=blen;
    if(ians[maxlen]!=0)printf("%d",ians[maxlen]);//如果最高位有进位,就显示出来
    for (int i=0;i<maxlen;i++)
    {
        printf("%d",ians[maxlen-1-i]);
    }
    printf("\n");
    free(ca);
    free(cb);
    free(ians);
}

转载于:https://www.cnblogs.com/caixu/archive/2011/09/26/2192189.html

你可能感兴趣的文章
免费分区助手
查看>>
Javascript通过Name调用Function
查看>>
统计当前在线用户数量
查看>>
IntelliJ IDEA 乱码解决方案 (项目代码、控制台等)
查看>>
PHP项目记录
查看>>
.net面试题系列文章七(附答案)
查看>>
FastSocket
查看>>
ionic $ionicSlideBoxDelegate 滑动框事件
查看>>
点击文字,把input type="radio"也选中
查看>>
第一章 Java多线程技能
查看>>
Java 集合系列-第八篇-Map架构
查看>>
springmvc 3.2 @MatrixVariable bug 2
查看>>
React-Native PanResponder手势识别器
查看>>
IOS11 光标错位问题
查看>>
如何设计用户登录
查看>>
linux安装mysql5.7.19
查看>>
Zookeeper+ActiveMQ 集群实现
查看>>
加权有向图问题2----多源最短路径问题(Floyd算法)和关键路径算法
查看>>
logback logback.xml常用配置详解(三) <filter>
查看>>
KgMall B2B/B2B2c/C2C版店铺商号初始化
查看>>