您的位置:首页 > 其它

打印1到最大的n位数

2012-07-15 20:30 141 查看
题目:输入数字n,按顺序打印出从1最大的n位十进制数,比如输入3,则打印出1,2 ,3一直到最大的3位数999

#include <iostream>

using namespace std;

void printArray(char *array, int size)
{
if (array == NULL || size <= 0)
{
return;
}

int index = 0;
while (array[index] == '0')
index++;

for (int i = index; i != size; i++)
printf("%c", array[i]);

cout << endl;
}

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

char *array = new char[n + 1];
if (array == NULL)
{
throw("allocate memory error");
return;
}

memset(array, '0', n);
array
= 0;

while (true)
{
int takeOver = 0;
for (int i = n - 1; i >= 0; i--)
{
int num = array[i] - '0';
if (i == n - 1)
{
num++;
}
else
{
num += takeOver;
takeOver = 0;
}

if (num == 10)
{
if (i == 0)
goto here;
array[i] = '0';
takeOver = 1;
}
else
{
array[i] = num + '0';
break;
}
}

printArray(array, n);
}

here:
delete []array;
}

void main()
{
int n = 3;
printNumbers(n);
}


一定要注意break的使用

array[i] = num + '0';

break;

由于此break的存在,使得takeOver不用重新置为0

也就是说

while (true)
{
int takeOver = 0;
for (int i = n - 1; i >= 0; i--)
{
int num = array[i] - '0';
if (i == n - 1)
{
num++;
}
else
{
num += takeOver;
//takeOver = 0;
}

if (num == 10)
{
if (i == 0)
goto here;
array[i] = '0';
takeOver = 1;
}
else
{
array[i] = num + '0';
break;
}
}

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