您的位置:首页 > Web前端

剑指offer-12 打印1到最大的N位数

2015-05-06 21:23 405 查看
遇见数值问题,要考虑溢出---转化为字符串

#include <iostream>
#include <cstring>
using namespace std;
void PrintNumber(char* number);
void PrintToMaxOfNDigits(unsigned int n);
void Print1ToMaxOfDigits(char* number,int length,int index);
/*
将数字转换为字符串
n位所有十进制数就是n个从0到9的全排列
*/
void PrintToMaxOfNDigits(unsigned int n)
{
if(n<=0)
return ;
char* number = new char[n+1];
number
='\0';

//打印的是1-9
for(int i = 0; i<10; i++)
{
number[0] = i+'0';
Print1ToMaxOfDigits(number,n,0);
}
delete[] number;
}

void Print1ToMaxOfDigits(char* number,int length,int index)
{
if(index==length-1)
{
PrintNumber(number);
return ;
}
for(int i = 0; i<10; i++)
{
number[index+1] = i+'0';
Print1ToMaxOfDigits(number,length,index+1);
}
}

/*
设置从第一个非0字符打印
*/
void PrintNumber(char* number)
{
bool isBeginning = true;
int length = strlen(number);

for(int i = 0; i<length; i++)
{
if(isBeginning && number[i] != '0')
isBeginning = false;
if(!isBeginning)
cout<<number[i];
}
cout<<"\t";
}
int main()
{
PrintToMaxOfNDigits(2);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: