1. 题目注意的陷阱:没有告诉n的大小。所以要考虑大数问题
2.还要注意的问题,就是字符串ASCII 与整数类型的转换!
两个正数的加法运算与下面代码类似,只需要稍微修改即可
// 打印从1到最的的n位数
#include <iostream>
#include <string>
#include<cmath>
using std::string;
using std::cout;
using std::endl;
bool invalid_input = false;
// 返回true时表示可以继续进行加法。返回false时表示
// 再相加就会溢出。即已经达到了n位数的最大值
bool Increment(string &str)
{
int i_value = 0;
for(int i = str.length() - 1; i >= 0; i--)
{
i_value = str[i] - '0';// 注意此处的转换形式
i_value++;
if(10 == i_value)
{
if(0 == i)
return false; // 再执行加法就会溢出即达到了
else
str[i] = '0';
}
else
{
str[i] = i_value + '0'; // 注意此处的转换形式
break;
}
}
return true;
}
void PrintNumber(const string &str)
{
if(str.empty())
return;
for(int i = 0; i != str.length(); i++)
{
if(str[i] != '0')
{
cout << str.substr(i, str.length())<<endl;
break;
}
}
}
void PrintAllNumber(const int &n)
{
if(n <= 0)
{
invalid_input = false;
return;
}
string str(n, '0');
while(Increment(str))
{
PrintNumber(str);
}
}
int main()
{
PrintAllNumber(4);
system("pause");
}