打印从1到最大的n位数
//和剑指offer程序基本一致,不过print和进位两部分合并在一个程序中 //如果把其分拆,进行适当的整理,代码会更加整洁 void PrintToMaxOfDigitsN(int n) { if (n <= 0) return; int i = 0; bool sign = false; //判断是否进一位 char *num = new char[n + 1], *num_out; //字符串初始化 for ( i = 0; i < n; i++) { num[i] = '0'; } num[n] = '\0'; while (true) { sign = false; if ('9' != num[n - 1]) { num[n - 1] += 1; } else { for (i = n - 2; i >= 0; i--) { if ('9' == num[i]) { if (0!=i) { num[i] = '0'; } else { delete[] num; return; //已经输出至最大值 } } else { num[i + 1] = '0'; num[i] += 1; break; //+1操作完成,跳出循环 } } } num_out = num; while ('0' == *num_out) { ++num_out; } cout << num_out << endl; } }
针对此题,还有使用全排列,调用递归实现。
另外,此题不适用char存储的话,可以使用四个bit存储一个十进制数。
最后,针对大数的加减乘除,使用字符串操作实在是虐心,可以使用string实现。
具体可参考:
http://bbs.csdn.net/topics/390499949中赵四老师的相关代码。