Loading
字典樹(Trie Tree)的基本操作
C++ atoi函數的實現

高精度加法 完全的函數封裝!

Freddy posted @ 2011年9月14日 02:37 in C++ 經典算法 with tags c++ 函數 算法 , 1240 阅读

高精度計算是NOIP中常考常用的算法之一,某天我閑的DT,寫了個代碼極其冗長的高精度加法函數,方便大家直接調用。

#include <iostream>
#include <string>
using namespace std;

char result[100];

void Highj(char a[],char b[])
{
    int x[100],y[100];
    int i,l,la,lb;
    char temp[100];
    for (i=0;i<99;i++){x[i]=0;y[i]=0;} //初始化
    la=strlen(a);
    lb=strlen(b);
    
    //把char型數組 按正倒序  變成整型數組
    if (la<=lb)
    {
        for (i=la-1;i>=0;i--)
            y[i]=a[la-1-i]-'0';
        for (i=lb-1;i>=0;i--)
            x[i]=b[lb-1-i]-'0';
        l=la;
    }
    else 
    {
        for (i=la-1;i>=0;i--)
            x[i]=a[la-1-i]-'0';
        for (i=lb-1;i>=0;i--)
            y[i]=b[lb-1-i]-'0';    
        l=lb;        
    }
    
    //執行加法運算
    for (i=0;i<l;i++)
    {
        x[i]=x[i]+y[i];
        if (x[i]>=10) 
        {
            x[i]-=10;
            x[i+1]+=1;
        }
    }
    
    //再把整型數組按照倒序轉換成char型數組
    for (i=99;i>=0;i--)
        temp[99-i]=x[i]+'0';
    
    //從不是0的一位開始輸出結果
    for (i=0;i<=99;i++)
    {
        if (temp[i]>'0')
        {
            for(int j=i;j<=99;j++)
                result[j-i]=temp[j];
            return;
        }
    }
    
    //如果沒有一位大於0
    result[0]='0';
    return;
}

int main()
{
    char a[100],b[100];
    cin>>a>>b;
    Highj(a,b);
    cout<<result<<endl;
    return 0;
}
Destroyer 说:
2011年9月14日 18:05

的确很冗长,不过还不错,都很正确~~收下了


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter