輸入數(shù)字n,按順序打印出從1到大的n位十進(jìn)制數(shù)。比如輸入3,則打印出1、2、3...一直到大的3位數(shù)即999。
創(chuàng)新互聯(lián)公司專(zhuān)業(yè)為企業(yè)提供通山網(wǎng)站建設(shè)、通山做網(wǎng)站、通山網(wǎng)站設(shè)計(jì)、通山網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、通山企業(yè)網(wǎng)站模板建站服務(wù),十多年通山做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。其實(shí)一看這個(gè)題,就可以想到用一個(gè)循環(huán)來(lái)打印,循環(huán)次數(shù)就為10的n次方減一,即輸入3循環(huán)999次依次打印出所對(duì)應(yīng)的值。但是,有一個(gè)重要的點(diǎn)就是,如果n的值很大,大到溢出了所能表示的大整型范圍的值,比如用long long數(shù)據(jù)類(lèi)型都存放不下了要怎么辦呢?這就可以考慮,用字符串的形式來(lái)表達(dá)大數(shù)據(jù),反正只是說(shuō)讓打印出來(lái);
程序設(shè)計(jì)如下:
#include#include using namespace std; void PrintMaxNNum(size_t n) { char *num = new char[n+1];//最后一個(gè)字符存放'\0' char* tmp = num; while(tmp < num+n)//初始化字符串將其全部設(shè)置為0 { *tmp = '0'; ++tmp; } *(tmp--) = '\0';//使tmp指向最后一個(gè)有效字符 char *cur = tmp; while(cur >= num) { while(*tmp < '9')//tmp始終在最后一位進(jìn)行加1并輸出 { ++(*tmp); cout< = num; ++i)//用循環(huán)來(lái)完成在cur到tmp的期間字符表示數(shù)字的進(jìn)位 { if((tmp-i) < cur)//當(dāng)要進(jìn)的位數(shù)不夠當(dāng)前cur所能表示的范圍時(shí)將cur范圍擴(kuò)大 --cur; if(cur >= num) { ++(*(tmp-i));//進(jìn)位 if(*(tmp-i) <= '9')//若進(jìn)位后不需要再向前進(jìn)位,則輸出并break重新回到最低位 { cout< 初步的思想就是用兩個(gè)指針表示數(shù)字的范圍,一個(gè)tmp指針始終處在最低位加1,當(dāng)需要進(jìn)位時(shí)不停地往cur的方向進(jìn)位,直到cur超出字符串的范圍;
運(yùn)行程序:
這數(shù)字已經(jīng)夠密密麻麻的了,如果設(shè)置再大一些比如超出系統(tǒng)數(shù)據(jù)類(lèi)型所能表示范圍的位數(shù),運(yùn)算都要耗費(fèi)些時(shí)間,這里就不設(shè)置驗(yàn)證了。
《完》
創(chuàng)新互聯(lián)www.cdcxhl.cn,專(zhuān)業(yè)提供香港、美國(guó)云服務(wù)器,動(dòng)態(tài)BGP最優(yōu)骨干路由自動(dòng)選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動(dòng)現(xiàn)已開(kāi)啟,新人活動(dòng)云服務(wù)器買(mǎi)多久送多久。
分享文章:打印1到最大的n位數(shù)——12-創(chuàng)新互聯(lián)
網(wǎng)站URL:http://weahome.cn/article/dshped.html