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];
    }

  • 相关阅读:
    检查SQL Server 2005的索引密度和碎片信息(转)
    数据库系统异常排查之DMV(转)
    sql server性能分析--执行sql次数和逻辑次数
    sql语句优化
    C#获取文件夹下的所有文件的文件名
    siebel学习笔记-应用/数据访问控制
    FlexPaper实现文档在线浏览(附源码)
    C# Process.WaitForExit()与死锁
    前端网站
    微信小程序
  • 原文地址:https://www.cnblogs.com/caixu/p/2192910.html
Copyright © 2011-2022 走看看