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

    华为给定函数接口void BigNumAdd(const char *ca[],const char *cb[],int *ians[]);要求实现大数相加功能。

    个人猜测:

    1. 数据的存储情况是两维数组(字符型),ca[i]表示的是某行,这是一个地址,指向一个char(字符),例如数字123,存储时是第一行1,即ca[1]=1;第二行2,即ca[2]=2;第三行3,即ca[3]=3;
    2. ca[i]用NULL初始化,这用来做ca是否结束的判断;
    3. ca开辟的是alen空间,cb开辟的是blen空间,ians开辟maxnum空间;

    思路见:http://www.cnblogs.com/caixu/archive/2011/09/26/2192189.html

    -----------------------

    贴代码:

    #include <iostream>
    using namespace std;
    const int maxnum=20;
    void BigNumAdd(const char *ca[],const char *cb[],int *ians[])
    {
        int *ia,*ib;
        int i=0,itemp=0;
        ia=new int[maxnum];
        ib=new int[maxnum];
        for (i=0;i<maxnum;i++)//ia和ib数组初始化,置0
        {
            ia[i]=0;
            ib[i]=0;
        }
        int alen=0,blen=0;
        i=0;
        while (ca[i])//以NULL来区分是否ca结束,ca长度存alen
            i++;
        alen=i;
        for (i=0;i<alen;i++)//a从字符串转数组
        {
            ia[i]=ca[alen-1-i][0]-'0';//高低位倒置
        }
        i=0;
        while (cb[i])i++;
        blen=i;
        for (i=0;i<blen;i++)
        {
            ib[i]=cb[blen-1-i][0]-'0';
        }
        int maxlen=0;
        maxlen=(alen>blen)?alen:blen;
        for (i=0;i<maxlen;i++)//求和
        {
            *ians[maxlen-i]=ia[i]+ib[i]+*ians[maxlen-i];//高低位逆转回来
            if (*ians[maxlen-i]>9)
            {
                *ians[maxlen-i]=*ians[maxlen-i]-10;
                *ians[maxlen-i-1]=*ians[maxlen-i-1]+1;
            }
        }
        cout<<"=";
        if (!ians[0])cout<<ians[0];
        for (i=1;i<maxlen+1;i++)
        {
            cout<<*ians[i];
        }
        cout<<endl;
        delete ia;
        delete ib;
    }
    void main()
    {  
        //输入示例:1+2
        //输出结果:=3
        const char *ca[maxnum];const char* cb[maxnum];
        int *ians[maxnum+1];
        int i=0;
        int alen=0,blen=0;
        char* p=NULL;
        for (i=0;i<maxnum;i++)ca[i]=NULL;//假设ca和cb是这样初始化的
        for (i=0;i<maxnum;i++)cb[i]=NULL;
        i=0;
        while (1)//接收输入a,“+”前面的是加数a
        {
            p=new char;
            *p=getchar();
            if (*p=='+'){delete p;i++;break;}
            ca[i]=p;
            i++;
        }
        alen=i-1;
        i=0;
        while (1)//接收输入b,“+”后、Enter键前的是被加数b
        {
            p=new char;
            *p=getchar();
            if (*p==10){delete p;i++;break;}
            cb[i]=p;
            i++;
        }
        blen=i-1;
        for (i=0;i<maxnum+1;i++)
        {
            ians[i]=new int;
            *ians[i]=0;
        }
        BigNumAdd(ca,cb,ians);
        for (i=0;i<alen;i++)
            delete ca[i];//注销的ca长度是alen,不是maxnum
        for (i=0;i<blen;i++)
            delete cb[i];
        for (i=0;i<maxnum+1;i++)
            delete ians[i];
    }

  • 相关阅读:
    java09 队列Queue与Deque
    java08 Set
    java07 map
    SNMP学习
    NPM
    windows主机资源Snmp OIDs CPU, Memory, Disk等
    servlet3.0 @webfilter 过滤顺序
    snmp v3的安全配置 snmp认证与加密配置(53)
    CentOS 7.2 (mini) 里iptables防火墙怎么关闭?
    ORA-00845 MEMORY_TARGET not supported on this system 的解决
  • 原文地址:https://www.cnblogs.com/caixu/p/2192910.html
Copyright © 2011-2022 走看看