• 使用数组实现大整数加法


    #include<iostream>
    #include<string>
    #include<cstring>
    #include<cstdio>
    #include<algorithm>
    #include<ctype.h>
    using namespace std;
    char* add(const char *arr,const char *brr)
    {
        //求两个加数的较大值即串较长的
        int lena=strlen(arr);
        int lenb=strlen(brr);
        int maxlen=(lena<lenb)?lenb:lena;
        /*为计算结果分配存储空间 较大加数长度maxlen 考虑进位结果长度为 mxlen+1
        再考虑上字符串结束标志'\0',所以申请空间大小是malloc(maxlen+2);*/
        char* sum=(char*)malloc(maxlen+2);
        memset(sum,'0',maxlen+1);// 初始化堆内存
        sum[maxlen+1]='\0';   //字符串结束标志
        int cin=0,k=0;    //进位初始化为0
        while(lena-->0 && lenb-->0)  //一直计算到较短字符串加数结束
        {
            int left=arr[lena]-'0'; //  字符转化为数字
            int right=brr[lenb]-'0'; //  字符转化为数字
            int s=left+right+cin;
            cin=s/10;
            s%=10;
            sum[k++]=s+'0';
        }
        if(lena<=0)  //字符串a先结束
        {
            while(lenb-->0)
            {
                int left=0;
                int right=brr[lenb]-'0';
                int s=left+right+cin;
                cin=s/10;        //C是进位
                s%=10;
                sum[k++]=s+'0';
            }
        }
        else if(lenb<=0)
        {
            while(lena-->0)
            {
                int left=arr[lena]-'0';
                int right=0;
                int s=left+right+cin;
                cin=s/10;
                s%=10;
                sum[k++]=s+'0';
    
            }
        }
        /*下边两句话的意思是:
        如果没有产生进位,则最高位0多余不写入
        结果中,长生进位的话则把进位也写入结果中*/
        if(cin!=0)
            sum[k++]=cin+'0';
        //及时添加字符串结束标志给现编字符串翻转函数做准备
        sum[k]='\0';
        strrev(sum); //字符串翻转
        return sum;
    }
    
    int main()
    {
        char a[]="20085121428"; //纪念汶川大地震
        char b[]="20134200802";  //为雅安地震祈福
        char result[100]={0};
        memset(result,'0',sizeof(result));
        char *p=add(a,b);
        cout<<"result is "<<p<<endl;
        free(p);
        p=NULL;
    }
    


  • 相关阅读:
    pandas:数据分析
    NumPy(数组计算)
    量化投资与python
    量化投资与python
    vue-cli之脚手架
    pycharm与github的使用
    GIT命令
    关于pytest的命令行传参
    python脚本测试websocket接口协议
    python关于type()与生成器generator的用法
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3036498.html
Copyright © 2020-2023  润新知