面试题之【打印1到最大的N位数】
2014-04-11 12:59
260 查看
题目描述:给定一个数字N,打印从1到最大的N位数。
看起来像是很简单的问题(虽然实际也不是很难。。。)我们很容易写出这样的代码:
但是这样还是有不少问题的,说的简单点这个N很大怎么办?你的程序还能运行吗?也就是说在范围不明确的情况下这可能是一个大数问题,大数的最简单解决方式是Java的BigInternet,但是C++里没有这个类(感觉好不符合时代潮流啊,估计快加上了吧)。于是我们要自己用字符串模拟,很简单就跟小学算算术一样,直接上代码:
顺便说几句对面试的这类题的一点想法吧,其实不管是笔试面试都会有这么一些考查程序稳定性的题目,也即是说给你那么个看似很简单的问题,看似是随意就能写出代码,但实际上就各种陷阱。这个只能是我们自己小心了,考虑要各种全面,能问的情况就尽量问清楚,对数据量、异常什么的要一百二十个小心。也是提醒自己小心吧。。。
看起来像是很简单的问题(虽然实际也不是很难。。。)我们很容易写出这样的代码:
#include<iostream> #include<cstdio> int a[]={9,99,999,9999,99999}; using namespace std; int main() { int N; cin>>N; for(int i=1;i<=a[N-1];i++) { printf("%d\n",i); } }
但是这样还是有不少问题的,说的简单点这个N很大怎么办?你的程序还能运行吗?也就是说在范围不明确的情况下这可能是一个大数问题,大数的最简单解决方式是Java的BigInternet,但是C++里没有这个类(感觉好不符合时代潮流啊,估计快加上了吧)。于是我们要自己用字符串模拟,很简单就跟小学算算术一样,直接上代码:
#include<iostream> #include<cstdio> #include<cstring> long long a[]={9,99,999,9999,99999,999999,9999999}; char c[100]; void add() { c[99]++; for(int i=99;i>=0;i--) { if(c[i]=='9'+1) { c[i]='0'; c[i-1]++; } //else //{ //c[i]++; //} } bool flg=false; for(int i=0;i<100;i++) { if(c[i]!='0') { flg=true; printf("%c",c[i]); } else { if(flg) { printf("0"); } } } printf("\n"); } void print(int N) { memset(c,'0',sizeof(c)); for(int i=1;i<=N;i++) { add(); } } using namespace std; int main() { int N; cin>>N; print(a[N-1]); return 0; }
顺便说几句对面试的这类题的一点想法吧,其实不管是笔试面试都会有这么一些考查程序稳定性的题目,也即是说给你那么个看似很简单的问题,看似是随意就能写出代码,但实际上就各种陷阱。这个只能是我们自己小心了,考虑要各种全面,能问的情况就尽量问清楚,对数据量、异常什么的要一百二十个小心。也是提醒自己小心吧。。。
相关文章推荐
- 剑指offer_面试题12_打印1到最大的n位数(大数问题)
- 剑指offer-面试题12.打印1到最大的n位数
- 面试题12:打印1到最大的n位数
- 剑指offer面试题12 打印1到最大的n位数
- 面试题12:打印1到最大的n位数
- 剑指offer之面试题12:打印1到最大的n位数
- 面试题12:输入数字n,按照顺序打印出从1最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数即999
- 剑指offer面试题12:打印1到最大的n位数
- 剑指offer之面试题12打印1到最大的n位数
- c++面试题之打印1到最大的n位数
- 剑指offer面试题12——打印1到最大的n位数
- 【剑指Offer学习】【面试题12 :打印1 到最大的n 位数】
- 面试题12—打印1到最大的n位数
- 剑指Offer----面试题12:打印1到最大的n位数
- 面试题12:打印1到最大的n位数
- 剑指Offer:面试题12 打印1到最大的n位数
- 面试题12 打印1到最大的N位数题目
- 面试题12:打印1到最大的n位数
- 剑指offer编程题Java实现——面试题12打印1到最大的n位数
- [剑指offer][面试题12]打印1到最大的n位数