[置頂] 打印1到最大的n位數(shù)
來源:程序員人生 發(fā)布時(shí)間:2016-08-06 09:21:03 閱讀次數(shù):2503次
解析:打印1到最大的n位數(shù),首先由于n的大小沒有肯定,所以就得分兩種情況斟酌,假設(shè)n在整數(shù)范圍內(nèi),當(dāng)n小于INT_MAX時(shí),直接用途理整數(shù)的方式來計(jì)算,否則就得將n轉(zhuǎn)化成字符串來處理,具體整數(shù)處理,請(qǐng)看代碼
<pre name="code" class="cpp">//打印1到最大的n位數(shù)
bool print_number(char *str,int n)
{
int top=0;
//從個(gè)位開始算起
for(int i=n⑴; i>=0; --i)
{
int sum=str[i]-'0'+top;
if(i==n⑴)
sum++;
//當(dāng)相加的值大于10時(shí),向前進(jìn)1,當(dāng)i!=0時(shí),把當(dāng)前位置置0
if(sum >=10)
{
if(i==0)
return true;
//else
sum-=10;
top=1;
str[i]='0';
}else
{
str[i]='0'+sum;//從最后1位開始相加
return false;
}
}
return false;
}
void print_result(char *str,int n)
{
bool flag=true;
for(int i=0; i<n; ++i)
{
//主要保證前面位數(shù)是零的就不輸入
//例如:001-->只讓它輸出1前面的00不輸出
if(flag && str[i] !='0')
flag=false;
if(! flag)
cout<<str[i];
}
cout<<" ";
}
void print_str(int n)
{
char *buf=new char[n+1];
memset(buf,'0',n);
buf[n]='\0';//這個(gè)是必須要的,保證字符串能結(jié)束
while(!print_number(buf,n))
{
print_result(buf,n);
}
delete []buf;
buf=NULL;
}
int get_len(int n)
{
int len=1;
for(int i=0; i<n; ++i)
{
if(len >=INT_MAX)
return INT_MAX;
len*=10;
}
return len;
}
void print(int n)
{
if(n <=0)
return;
int len=get_len(n);
//#define INT_MAX 2147483647 /* maximum (signed) int value */
//這是系統(tǒng)里自帶的
if(len >= INT_MAX)
{
print_str(n);
return;
}
for(int i=1; i<len; ++i)
cout<<i<<" ";
cout<<endl;
}
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)