zoukankan      html  css  js  c++  java
  • 【C】两个大数相加

    思想:大数超出了计算机的整形表示范围,故一般用字符串记录,两个大数相加就不能简单的用“+”进行运算,得绕个弯。先把字符串转成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);
    }

  • 相关阅读:
    【转】Android中的颜色设置
    hashlib —— Python 的 md5 和 sha1 加密
    caffe 在 windows 下的配置(scriptsuild_win.cmd)
    caffe 在 windows 下的配置(scriptsuild_win.cmd)
    windows 批处理脚本(batch scripting)
    windows 批处理脚本(batch scripting)
    matlab 辅助函数 —— 文件下载与文件解压
    matlab 辅助函数 —— 文件下载与文件解压
    翻译的艺术 —— 句子的翻译(意译)
    翻译的艺术 —— 句子的翻译(意译)
  • 原文地址:https://www.cnblogs.com/caixu/p/2192189.html
Copyright © 2011-2022 走看看