剑指OFFER之打印1到最大的N位数(九度OJ1515)

题目描述:

给定一个数字N,打印从1到最大的N位数。

 

输入:

每个输入文件仅包含一组测试样例。
对于每个测试案例,输入一个数字N(1<=N<=5)。

 

输出:

对应每个测试案例,依次打印从1到最大的N位数。

 

样例输入:

1 

 

样例输出:

1

2

3

4

5

6

7

8

9

解题思路:

  直接通过n快速指定比最大的那个数大1的数,10,100,1000,10000,100000....

  输出,就行了...

代码:

#include <stdio.h>

int main(void){

    int n,i;

    while(scanf("%d",&n)!=EOF && n>=1 && n<=5){

        i = n;

        int m = 1;

        while(i--){

            m *= 10;

        }

        for(i=1;i<m;i++)

            printf("%d\n",i);

    }

    return 0;

}

/**************************************************************

    Problem: 1515

    User: xhalo

    Language: C

    Result: Accepted

    Time:40 ms

    Memory:912 kb

****************************************************************/

  写出上面的代码,那么你就正式的掉入面试官的坑了。如果这道题的位数不是5,而是10,或者100呢。正常的int显然是无法满足的。

  因此可以考虑使用字符串或者数组表示大数据。

  下面给出了使用数组的表示方法:

#include <stdio.h>

#include <stdlib.h>

#include <memory.h>

int num[10];

int add(int n);

int main(void){

    int n,i;

    while(scanf("%d",&n)!=EOF && n>=1 && n<=5){

        memset(&num,0,sizeof(int)*10);

        while(!add(n)){

            int flag = 0;

            for(i=10-n;i<10;i++)

                if(num[i] != 0 || flag){ //如果是前面的零,则不输出;如果是后面的零,则输出

                    flag = 1;

                    printf("%d",num[i]);

                }

            printf("\n");

        }

    }

    return 0;

}

int add(int n){

    int isoverflow = 0;

    int carry = 0;

    int i;

    for(i=9;i>=10-n;i--){

        num[i] += carry;

        if(i == 9)

            num[i]++;

 

        if(num[i] >= 10){

            if(i == 10-n){

                isoverflow = 1;

            }else{

                num[i] -= 10;

                carry = 1;

            }

        }else{

            break;

        }

    }

    return isoverflow;

}

/**************************************************************

    Problem: 1515

    User: xhalo

    Language: C

    Result: Accepted

    Time:110 ms

    Memory:912 kb

****************************************************************/

 

你可能感兴趣的:(打印)