打印1到最大的n位数
2016-09-17 14:26
274 查看
题目: 输入2 则输出1~99 输入3 则输出1~999
思路: 属于大数问题,因为输出的n一大,则特别容易出现溢出问题,即超出long long可表示的范围。
所以用一般的思路: 根据n的位数,先求出最大的值,接着遍历。 是不符合要求的
新思路: 将n位的每一位看成是一个字符, 输出的数字只是n位字符的全排列。 比如数字34,只是理解为 char num[3] = "34";
代码:
#include <iostream>
#include <vector>
#include <string>
using namespace std;
void PrintfOut(char *strnum) //最高位的‘0’不打印出来
{
int len = strlen(strnum);
bool iszero = true;
for (int i = 0; i < len; ++i)
{
if (iszero && strnum[i]!='0')
{
iszero = false;
}
if (!iszero)
{
cout << strnum[i];
}
}
if (!iszero)
cout << '\t';
}
void Func2(char *strnum, int length, int index)
{
if (index == length-1) //递归终止条件
{
PrintfOut(strnum);
return;
}
for (int i = 0; i < 10; ++i)
{
strnum[index+1] = i + '0';
Func2(strnum, length, index+1);
}
}
void Func(int n)
{
char *strnum = new char[n+1];
memset(strnum, '0', n+1);
strnum
= '\0';
for (int i = 0; i < 10; ++i)
{
strnum[0] = i + '0'; //最高位从'0'到'9'
Func2(strnum, n, 0);
}
}
int main()
{
int num;
cin >> num;
Func(num);
system("pause");
}
思路: 属于大数问题,因为输出的n一大,则特别容易出现溢出问题,即超出long long可表示的范围。
所以用一般的思路: 根据n的位数,先求出最大的值,接着遍历。 是不符合要求的
新思路: 将n位的每一位看成是一个字符, 输出的数字只是n位字符的全排列。 比如数字34,只是理解为 char num[3] = "34";
代码:
#include <iostream>
#include <vector>
#include <string>
using namespace std;
void PrintfOut(char *strnum) //最高位的‘0’不打印出来
{
int len = strlen(strnum);
bool iszero = true;
for (int i = 0; i < len; ++i)
{
if (iszero && strnum[i]!='0')
{
iszero = false;
}
if (!iszero)
{
cout << strnum[i];
}
}
if (!iszero)
cout << '\t';
}
void Func2(char *strnum, int length, int index)
{
if (index == length-1) //递归终止条件
{
PrintfOut(strnum);
return;
}
for (int i = 0; i < 10; ++i)
{
strnum[index+1] = i + '0';
Func2(strnum, length, index+1);
}
}
void Func(int n)
{
char *strnum = new char[n+1];
memset(strnum, '0', n+1);
strnum
= '\0';
for (int i = 0; i < 10; ++i)
{
strnum[0] = i + '0'; //最高位从'0'到'9'
Func2(strnum, n, 0);
}
}
int main()
{
int num;
cin >> num;
Func(num);
system("pause");
}
相关文章推荐
- 每天一个linux命令: /etc/group文件详解
- java 实现 mysql 数据库导出与导入(适合linux和windows)
- Cocos[3.2]番外篇——获取本地时间
- 5不可思议的旅游目的地参观
- oscache介绍
- 防止点浏览器返回按钮,返回上一页的JS方法
- Bootstrap框架结合jQuery仿百度换肤功能实例解析
- Test.java
- redis的选择和定位
- 数组中的逆序对
- 深入浅出JMS(一)--JMS基本概念
- 栈和队列常考面试题(一)
- pickle序列化
- 太太万岁
- HTML5语义标签的实践
- 简单排序(冒泡、选择、插入)总结
- 112. Path Sum
- bzoj 2456: mode(找众数)
- vagrant 环境配置以及常用命令
- 解决MySQL ERROR 1130 (HY000): Host 'XXXX' is not allowed to connect to this MySQL server