• 高精度加法


    /*
    Author:JustinZhang
    Email:uestczhangchao@gmail.com
    Time:2012年4月22日23:39:40
    desc:高精度加法
    */
    
    #include <iostream>
    #include <cstring>
    using namespace std;
    
    /*
    a、b为字符数组,内部存储了加数和被加数,ans用来存放最终结果,也为字符数组
    */
    void arbitary_add(const char *a, const char *b,char *ans)
    {
        int lena = strlen(a);
        int lenb = strlen(b);
        int maxlen = (lena > lenb) ? lena : lenb; //求得两个串长的最大者
        int *arrayA = new int [maxlen+1];
        int *arrayB = new int [maxlen+1];
        
        int *intans = new int [maxlen+1];//用来存放两个字符串的数字相加的结果
        int i=0,j=0;
    
        //对加法的结果数组清零
        for(i=0; i<maxlen+1; i++)
        {
            intans[i] = 0;
            arrayA[i] = 0;
            arrayB[i] = 0;
        }
    
        //将加数字符串中的数组取出来,放到整型数组当中,字符数组的第一个字符对应于整数的最高位.
        for(i=0; i<lena; i++)
        {
            arrayA[lena-i-1] = a[i] - '0';
        }
        //将被加数字符串中的数组取出来,放到整型数组当中,字符数组的第一个字符对应于整数的最高位.
        for(j=0; j<lenb; j++)
        {
            arrayB[lenb-j-1] = b[j] - '0';
        }
        //根据上面得到的整型数组,一位一位的做加法操作
        for(i=0; i<maxlen; i++)
        {
            intans[i] += arrayA[i]+ arrayB[i];
            
            //如果第i位的结果超过10,那么就向第i+1位进位
            if(intans[i] > 9)
            {
                intans[i] = intans[i] - 10;
                intans[i+1] = intans[i+1] + 1;
            }
        }
    
        //如果最高位有进位
        if(intans[maxlen]!=0)
        {
            ans[0] = intans[maxlen]+'0';
            //将整型数组转换为字符数组
            for(i=1; i<=maxlen;i++)
            {
                ans[i] = intans[maxlen-i]+'0';
            }
            ans[maxlen+1] = '\0';
        }
        else
        {
            //将整型数组转换为字符数组
            for(i=0; i<maxlen;i++)
            {
                ans[i] = intans[maxlen-i-1]+'0';
            }
            ans[maxlen] = '\0';
        }
        delete [] arrayA;
        delete [] arrayB;
        delete [] intans;
    }
    
    int main()
    {
        int count = 0;
        char *ans = new char[20];
        char *s1 = "1239945";
        char *s2 = "79999999";
        arbitary_add(s1,s2,ans);
        while(ans[count]!='\0')
        {
            cout << ans[count++] ;
        }
        cout << endl;
        delete [] ans;
        return 0;
    }
  • 相关阅读:
    git branch用法总结
    vue-router异步加载组件
    vue错误提示 Cannot read property 'beforeRouteEnter' of undefined,刷新后跳到首页
    websocket常见错误
    Websocket原理
    怎么在overflow-y:sroll的情况下 隐藏滚动条
    URI和URL有什么区别
    确定浏览器是否支持某些DOM模块
    将nodeList转换为数组(兼容性)
    软件的三种版本
  • 原文地址:https://www.cnblogs.com/justinzhang/p/2465809.html
Copyright © 2020-2023  润新知