微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐