zoukankan      html  css  js  c++  java
  • 剑指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
    ",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("
    ");
            }
        }
        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
    ****************************************************************/
  • 相关阅读:
    图片压缩后,依然很大的解决方案
    怎么使用javascript实现类的功能
    javascript实现像java、c#之类的sleep暂停的函数功能
    用ajax和asp.net实现智能搜索功能
    insert into 和insert into select性能比较
    百度编辑器
    document.selection.createRange()
    CSS设置透明效果
    class中一个小技巧
    asp.net中 解析JSON
  • 原文地址:https://www.cnblogs.com/xing901022/p/3753736.html
Copyright © 2011-2022 走看看