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"); }