您的位置:首页 > 其它

打印1到最大的n位数

2016-10-17 21:40 155 查看
代码:

#include <iostream>

using namespace std;

//打印数字
void printNumber(char* number)  //前面为0的数字不打印
{
int len = strlen(number);
int i = 0;
while (number[i] == '0')
i++;
for (int j = i; j < len; j++)
cout << number[j];
cout << "\t";
}

//
bool numberIncrease(char* number)
{
bool isOverflow = false;
int digit = 0;      //保存某位上的数字
int carry = 0;      //进位
int len = strlen(number);

for (int i = len - 1; i >= 0; --i)   //从最低位开始处理
{
digit = number[i] - '0' + carry;

if (i == len - 1)
digit++;

if (digit >= 10)
{
if (i == 0)     //溢出
isOverflow = true;
else
{

digit -= 10;
carry = 1;
number[i] = digit + '0';
}
}
else
{
number[i] = digit + '0';
break;      //跳出循环
}

}

return isOverflow;
}

//方法一
//为了处理大数(最大的n位数无论是int型还是long型都可能溢出)
//用字符串模拟数字
void Print1ToMaxOfNdigits(int n)
{
char *number = new char[n + 1];
memset(number, '0', n);
number
= '\0';
while (!numberIncrease(number))
{
printNumber(number);
}

delete[] number;
}

/*-------------------------------------------------------------------------*/
void printRecursive(char* number, int len, int index)
{
if (index == len - 1)
{
printNumber(number);
return;
}

for (int i = 0; i < 10; ++i)
{
number[index + 1] = i + '0';
printRecursive(number, len, index + 1);
}
}

//递归产生全排列(每一位0~9)
void Print1ToMaxOfNdigits_2(int n)
{
char *number = new char[n + 1];
memset(number, '0', n);
number
= '\0';
for (int i = 0; i < 10; i++)
{
number[0] = i + '0';
printRecursive(number, n, 0);

}

delete[] number;
}

int main()
{
int n = 2;

cout << "使用字符数组: " << endl;
Print1ToMaxOfNdigits(n);
cout << endl<<endl;

cout << "递归(全排列): " <<endl;
Print1ToMaxOfNdigits_2(n);

cout << endl;
system("pause");
return 0;
}


测试:

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