输入数字n,按顺序打印出从1到最大的n位十进制数。
比如输入3,则打印出1,2,3一直到999(最大的3位数)。
思路:
因为n没给,所以必须考虑到大数相乘除
得用字符串来处理。
- 个位(最低位在str[0])加加
- change函数检测是否需要进位,返回值是为了在最高位需要进位的时候停止
- pcout输出
#include <iostream>
#include <vector>
using namespace std;
bool change(string & str)
{
for(int i=0;i<str.size();i++)
{
if(str[i]==('9'+1))
{
if(i==str.size()-1)
return false;
str[i+1]++;
str[i]='0';
}
}
return true;
}
void pcout(string & str)
{
bool flag=false;
for(int i=str.size()-1;i>=0;i--)
{
if(str[i]!='0')
{
flag=true;
cout<<str[i];
}else{
if(flag)
cout<<str[i];
}
}
cout<<endl;
}
void Printout(int n)
{
if(n<=0)
return;
string str(n,'0');
//while(str[str.size()-1]!='9')
while(1)
{
str[0]++;
if(!change(str))
break;
pcout(str);
}
}
int main()
{
int x=3;
Printout(x);
return 0;
}
递归地显示全排序:
#include <iostream>
using namespace std;
void pcout(string& str,int n)
{
bool flag = false;
for (int i = 0; i <n; i++)
{
if (str[i] != '0')
{
flag = true;
cout << str[i];
}else{
if (flag)
cout << str[i];
}
}
cout << endl;
}
void PrintOutRecursively(string& str, int n, int a)
{
if (a == n-1)
{
pcout(str,n);
return;
}
for (int i = 0; i < 10; i++)
{
str[a + 1] = i + '0';
PrintOutRecursively(str, n, a + 1);
}
}
void Printout(int n)
{
if (n < 0) return;
string str(n, '0');
for (int i = 0; i < 10; i++)
{
str[0] = i + '0';//从高向低递归
PrintOutRecursively(str,n,0);
}
}
int main()
{
int x = 3;
Printout(x);
return 0;
}