打印1到最大的n位数
来源:互联网 发布:香港理工大学知乎 编辑:程序博客网 时间:2024/05/21 22:52
题目: 输入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[n] = '\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");
}
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的N位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1 到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的N位数
- 抽象
- 模拟网页点击事件
- Android,底部导航+viewpager+fragment+drawerlayout+toolbar+recyclerview
- Python与C++,SWIG
- 在小米手机上,修改APP的launcher应用图标不生效的解决方案
- 打印1到最大的n位数
- Activity生命周期,启动Activity,以及Activity之间数据的传递
- 稳扎稳打JS——this
- 双击退出APP
- Umlet绘制类关系图
- 给 Android 开发者的 RxJava 详解
- GNU复合语句
- 另类电商年收入上亿美金
- PHP数据库基础操作