打印1到最大的n位数
2016-10-17 21:40
155 查看
代码:
测试:
#include <iostream> using namespace std; //打印数字 void printNumber(char* number) //前面为0的数字不打印 { int len = strlen(number); int i = 0; while (number[i] == '0') i++; for (int j = i; j < len; j++) cout << number[j]; cout << "\t"; } // bool numberIncrease(char* number) { bool isOverflow = false; int digit = 0; //保存某位上的数字 int carry = 0; //进位 int len = strlen(number); for (int i = len - 1; i >= 0; --i) //从最低位开始处理 { digit = number[i] - '0' + carry; if (i == len - 1) digit++; if (digit >= 10) { if (i == 0) //溢出 isOverflow = true; else { digit -= 10; carry = 1; number[i] = digit + '0'; } } else { number[i] = digit + '0'; break; //跳出循环 } } return isOverflow; } //方法一 //为了处理大数(最大的n位数无论是int型还是long型都可能溢出) //用字符串模拟数字 void Print1ToMaxOfNdigits(int n) { char *number = new char[n + 1]; memset(number, '0', n); number = '\0'; while (!numberIncrease(number)) { printNumber(number); } delete[] number; } /*-------------------------------------------------------------------------*/ void printRecursive(char* number, int len, int index) { if (index == len - 1) { printNumber(number); return; } for (int i = 0; i < 10; ++i) { number[index + 1] = i + '0'; printRecursive(number, len, index + 1); } } //递归产生全排列(每一位0~9) void Print1ToMaxOfNdigits_2(int n) { char *number = new char[n + 1]; memset(number, '0', n); number = '\0'; for (int i = 0; i < 10; i++) { number[0] = i + '0'; printRecursive(number, n, 0); } delete[] number; } int main() { int n = 2; cout << "使用字符数组: " << endl; Print1ToMaxOfNdigits(n); cout << endl<<endl; cout << "递归(全排列): " <<endl; Print1ToMaxOfNdigits_2(n); cout << endl; system("pause"); return 0; }
测试:
相关文章推荐
- P94、面试题12:打印1到最大的n位数
- 剑指offer-面试题12.打印1到最大的n位数
- 海涛老师的面试题-作业12-打印从1到最大的n位数
- 打印从1到最大的n位数.
- 剑指offer 面试题17:打印1到最大的n位数
- 打印1到最大的n位数
- 12_打印1到最大的N位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 实现自己的pow函数&&打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 剑指offer:打印1到最大的n位数
- 剑指offer编程题Java实现——面试题12打印1到最大的n位数
- 剑指Offer 面试题12:打印1到最大的N位数 题解
- 剑指offer-12:打印1到最大的n位数
- 打印1到最大的n位数
- 剑指offer之面试题12打印1到最大的n位数
- 打印1到最大的n位数