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
    ****************************************************************/
  • 相关阅读:
    LVS实现负载均衡原理及安装配置 负载均衡
    Jexus-5.6.3使用详解
    公共笔记
    net 网站过滤器 mvc webapi
    WebApi 生成帮助文档及顺便创建简单的测试工具
    Dapper.NET——轻量ORM
    C# Entity Framework并发处理
    linq 日常关键字使用
    解决nginx负载均衡的session共享问题
    table中实现数据上移下移效果
  • 原文地址:https://www.cnblogs.com/xing901022/p/3753736.html
Copyright © 2011-2022 走看看