如何得到长整数逆序后的整数
生活随笔
收集整理的這篇文章主要介紹了
如何得到长整数逆序后的整数
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
目錄
- 一 如何得到長整數(shù)逆序后的整數(shù)
注:原創(chuàng)不易,轉(zhuǎn)載請務(wù)必注明原作者和出處,感謝支持!
一 如何得到長整數(shù)逆序后的整數(shù)
最近在寫代碼遇到這樣一個問題:如何得到得到一個長整型數(shù)逆序后的長整型數(shù)?比如輸入輸入\(a = 12345678\),得到輸出\(ra=87654321\)。
如下圖,仔細(xì)分析輸入數(shù)的特點,可以得到一個簡單的遞歸算法來解決這個問題。
注:做圖的時候最后倒數(shù)第二行少了加號
void reverse(unsigned long a, unsigned long *sum, unsigned long power) {if (a > 10)reverse(a/10, sum, power/10);*sum += (a % 10) * power; }unsigned long get_reverse(unsigned long a) {/* 根據(jù)a的位數(shù)確定最大位權(quán)值 */int i;unsigned long power = 1;char buf[16];sprintf(buf, "%lu", a);for (i = 0; i < strlen(buf) - 1; i++)power *= 10;/* 調(diào)用reverse() */unsigned long sum = 0;reverse(a, &sum, power);return sum; }回過頭來想上面的代碼,會發(fā)現(xiàn)既然借用sprintf()能夠輕而易舉地將\(a\)的最大位權(quán)值計算出來,那為何還用采用遞歸這種低效的計算方式呢?于是,一種效率更好一點的,可以避免遞歸的算法可以實現(xiàn)如下。
unsigned long get_reverse(unsigned long a) {/* 根據(jù)a的位數(shù)確定最大位權(quán)值 */int i;unsigned long power = 1;char buf[16];sprintf(buf, "%lu", a);for (i = 0; i < strlen(buf) - 1; i++)power *= 10;unsigned long sum = 0;for (i = strlen(buf) - 1; i >= 0; i--){sum += (buf[i] - '0') * power;power /= 10;}return sum; }上述代碼的復(fù)雜度為:\(O(strlen(a)) = O(log~a)\)。更進(jìn)一步,還有沒有效率更高的算法能夠解決這個問題呢?
轉(zhuǎn)載于:https://www.cnblogs.com/laizhenghong2012/p/10991202.html
總結(jié)
以上是生活随笔為你收集整理的如何得到长整数逆序后的整数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二十年后欧亨利启示与思考(做具有普世价值
- 下一篇: 斗鱼tv(斗鱼TV下载)