您的位置:首页 > 职场人生

面试题12:打印1到最大的n位数(大数问题)

2016-07-04 15:20 676 查看
面试题是关于n位整数并且没有限定n的取值范围,或者是输入任意大小的整数,那么这个题目就很可能需要考虑大数问题。字符串是一个简单的、有效的表示大数的方法

这题比较难,用递归表达全排列,数字每一位都可能是0-9,从高位往低位设置

void Print1ToMaxOfNDigits_2(int n)
{
if(n <= 0)
return;

char* number = new char[n + 1];
number
= '\0';

for(int i = 0; i < 10; ++i)
{
number[0] = i + '0';
Print1ToMaxOfNDigitsRecursively(number, n, 0);
}

delete[] number;
}

void Print1ToMaxOfNDigitsRecursively(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';
Print1ToMaxOfNDigitsRecursively(number, length, index + 1);
}
}

// 字符串number表示一个数字,数字有若干个0开头
// 打印出这个数字,并忽略开头的0
void PrintNumber(char* number)
{
bool isBeginning0 = true;
int nLength = strlen(number);

for(int i = 0; i < nLength; ++ i)
{
if(isBeginning0 && number[i] != '0')
isBeginning0 = false;

if(!isBeginning0)
{
printf("%c", number[i]);
}
}

printf("\t");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: