博客园 联系 订阅 订阅 管理  

Blog Stats

蔡諝的窝

华为给定函数接口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];
}

posted on 2011-09-27 11:06 蔡諝 阅读(...) 评论(...) 编辑 收藏