您的位置:首页 > 职场人生

剑指Offer 面试题12:打印1到最大的N位数 题解

2016-05-03 15:50 477 查看
剑指Offer 面试题12:打印1到最大的N位数

九度OJ 1515 提交网址: http://ac.jobdu.com/submitpage.php?pid=1515&sid=1539822

牛客OJ:未收录

题目描述:
给定一个数字N,打印从1到最大的N位数。
输入:
每个输入文件仅包含一组测试样例。

对于每个测试案例,输入一个数字N(1<=N<=5)。
输出:
对应每个测试案例,依次打印从1到最大的N位数。
样例输入:

1
样例输出:

1

2

3

4

5

6

7

8

9

分析:

  此题在OJ里完全没有陷阱,就是从1~99...9全部输出一遍,因为位数n是规定好了的。但如果是面试中面试官故意不告诉你n的范围,那就是等着机会坑你的。对于int和long long范围内。能直接用单个变量解决;如果位数多了,就需要用高精度算法。其他的就不需要多说了,对于大数的加1输出等等操作都要自己写函数完成。

纯C语言代码 竟然可以直接AC:
#include<stdio.h>

int main()
{
int i;
int n, N;

while(scanf("%d", &n) == 1 && n>=1 &&n<=5)
{
N = 1;
for(i = 0; i < n; ++i){
N *= 10;
}
--N;
for(i = 1; i <= N; ++i){
printf("%d\n", i);            // 此代码中没使用高效的算法,将较慢的cout换成printf可以省时
}
}
return 0;
}
/**************************************************************
Problem: 1515
Language: C
Result: Accepted
Time:40 ms
Memory:912 kb
****************************************************************/


内存 912 kb  耗时 40 ms

编程基础回顾:

1. C语言中的 scanf 函数是有返回值的,它的返回值可以分成三种情况:
  1) 正整数,表示正确输入参数的个数。例如执行 scanf("%d %d", &a, &b);

      如果用户输入"3 4",可以正确输入,返回2(正确输入了两个变量);

      如果用户输入"3,4",可以正确输入a,无法输入b,返回1(正确输入了一个变量)。

  2) 0,表示用户的输入不匹配,无法正确输入任何值。如上例,用户如果输入",3 4",返回0。

  3) EOF,这是在stdio.h里面定义的常量(通常值为-1),表示输入流已经结束。在Windows下,用户按下CTRL+Z(会看到一个^Z字符)再按下回车(可能需要重复2次),就表示输入结束;Linux/Unix下使用CTRL+D表示输入结束。

所以可以使用下面的代码来处理输入:

while (scanf("%s %c %c", str, &oldchar, &newchar) == 3) /* 或!= EOF , 但前者更好 */

{

    ; //处理

}

2. 为什么前面 scanf 的格式串里面,%s和%c中间需要空格呢?

  那是因为如果没空格的话。。。oldchar输入的就是空格了= =.

3. 顺便说一下,printf的返回值是输出的字符数,例如,printf("1234")的返回值是4,而printf("1234\n")的返回值是5。

建议:你可能已经听说过很多次了,在OJ上做题尽量使用scanf和printf,尤其是有大量数据需要输入输出时,尽量避免使用cout.

当然,写成下面这样也可以:

#include<stdio.h>
#include<iostream>
using namespace std;

int main()
{
int i;
int n, N;

while(cin>>n && n>=1 &&n<=5)
{
N = 1;
for(i = 0; i < n; ++i){
N *= 10;
}
--N;

for(i = 1; i <= N; ++i){
printf("%d\n", i);
}
}
return 0;
}
/**************************************************************
Problem: 1515
Language: C++
Result: Accepted
Time:40 ms
Memory:1520 kb
****************************************************************/


其他高效算法 相关链接:

http://blog.csdn.net/gatieme/article/details/51132108

http://blog.csdn.net/ns_code/article/details/25562105
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: