不用额外变量实现变量交换 及 大数相加

1)不用额外变量实现变量交换

int a=1;

int b=2;

a=a+b;

b=a-b;    //此时a变量值为3

a=a-b;   //此时a变量值仍为3,b变量为1


问题:若a和b都很大的时候,会有溢出的可能。


2)大数相加(copy的一段代码)

std::string stringAdd( const std::string& strLeft, const std::string& strRight )  
{  
    //结果最长为较长数字加1   
    int nLeftLength = strLeft.length();  
    int nRigthLength = strRight.length();  
    int nLargeLength = nLeftLength >= nRigthLength ? nLeftLength : nRigthLength;  
    std::string strResult( nLargeLength+1, '0' );  
    int nCount = 0;  
    while( nLargeLength )  
    {  
        char nTempLeft;  
        if( nLeftLength )  
        {  
            nTempLeft = strLeft[--nLeftLength];  
        }  
        else  
        {  
            nTempLeft = '0';  
        }  
        cout << "tempLeft:" << nTempLeft << std::endl;  
        char nTempRigth;  
        if( nRigthLength )  
        {  
            nTempRigth = strRight[--nRigthLength];  
        }  
        else  
        {  
            nTempRigth = '0';  
        }  
        cout << "tempRight:" << nTempRigth << std::endl;  
        //计算当前位的值   
        int nTemp = nTempLeft-'0' + nTempRigth-'0' + strResult[nLargeLength]-'0';  
        cout << "temp:" << nTemp << std::endl;  
        strResult[nLargeLength] = (nTemp%10)+'0';  
        cout << "nLargeLength:" << nLargeLength << std::endl;  
        //如果超过了10则应进1   
        if( nTemp >= 10 )  
        {  
            strResult[nLargeLength-1] = 1+'0';  
        }  
        nLargeLength--;  
    }  
    return strResult;  
}  







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值