面试题12:打印1到最大的n位数
2017-02-19 10:28
232 查看
题目:输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,则打印1,2,3,4,5一直到最大的3位数999。
思路:看到题目的第一反应,应该是想到先把这个最大的数给找出来,然后在从1一直输出到这个数。
但是这个做法存在一个潜在的陷阱,当n比较大的时候,不能用int,double,long来存储时,程序会发生错误。
所以我们需要换一个策略,可以用字符串来存储,用字符串来模拟整数的加法过程。
increment()实现模拟整数递增的功能,printnumber()实现显示的功能。
思路:看到题目的第一反应,应该是想到先把这个最大的数给找出来,然后在从1一直输出到这个数。
void printToMax(int n) { int maxNum = 1; for(int i = 0; i < n; ++i) { maxNum = 10 * maxNum; } for(int i = 1; i < maxNum; ++i) { cout<<i<<endl; } }
但是这个做法存在一个潜在的陷阱,当n比较大的时候,不能用int,double,long来存储时,程序会发生错误。
所以我们需要换一个策略,可以用字符串来存储,用字符串来模拟整数的加法过程。
int main(int argc, const char * argv[]) { int n = 9; char *number = new char[n + 1]; memset(number, '0', n+1); number = '\0'; while(!increment(number)) { printnumber(number); } delete[] number; return 0; }
increment()实现模拟整数递增的功能,printnumber()实现显示的功能。
bool increment(char *s) //将字符串看成整数 实现递增 { int length = strlen(s); int nTakeover = 0; bool isOverflow = false; //是否到达了最高n位整数 for(int i = length - 1; i >= 0; i--) { int nSum = s[i] - '0' + nTakeover; //nSum为整数 不是char型 if(i == length - 1) nSum++; //第一次循环时 最后一位数+1 if(nSum >= 10) //当nSum>=10时 说明此位需要进位 { if(i == 0) //当i=10时 说明第一位也需要进位 说明这个时候已经到达了n位最大数 循环到此结束 返回1 { isOverflow = true; break; } else { nTakeover = 1; //当i!=0时 说明时中间的位数需要进位 使进位标识为1 s[i] = '0'; //将进位的此为置为0 } } else { s[i] = '0' + nSum; //如果此位没有进行进位 那么前面的位数也不可能进位 所以到这里直接break break; } } return isOverflow; }
void printnumber(char *s) //从第一个非0位开始输出 { int length = strlen(s); int flag = 0; for(int i = 0; i < length; i++) { if(s[i] == '0' && flag==0) { continue; } flag = 1; cout<<s[i]; } cout<<endl; }
相关文章推荐
- 剑指Offer:面试题12 打印1到最大的n位数
- 面试题12: 打印1到最大的n位数v
- 剑指offer面试题12-打印1到最大的n位数
- 面试题12:打印1到最大的n位数-大数问题-递归实现多层循环
- 面试题12-打印1到最大的n位数
- 剑指offer面试题[12]-打印1到最大的n位数
- 剑指offer编程题Java实现——面试题12打印1到最大的n位数
- 面试题12:打印1到最大的n位数
- 剑指Offer面试题12[打印1到最大的n位数]
- 面试题12:打印1到最大的n位数
- 面试题12打印1到最大的n位数
- 剑指offer-面试题12.打印1到最大的n位数
- 剑指offer_面试题12_打印1到最大的n位数(大数问题)
- 剑指offer-面试题12-打印1到最大的n位数
- 剑指offer面试题12:打印1到最大的n位数(1)
- 剑指offer——面试题12:打印1到最大的n位数
- [剑指offer][面试题12]打印1到最大的n位数
- 面试题12:输入数字n,按照顺序打印出从1最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数即999
- 面试题12:打印1到最大的n位数
- 面试题12:打印1到最大的n位数