程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 使用數組實現大整數加法

使用數組實現大整數加法

編輯:C++入門知識

[cpp]
#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; 

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


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved