[C语言][剑指offer篇]--打印从1到最大的n位数

题目描述

输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。

示例 1:

输入: n = 1
输出: [1,2,3,4,5,6,7,8,9]


来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/da-yin-cong-1dao-zui-da-de-nwei-shu-lcof/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


理清思路

 n = 1 时,最大值是 9 ;n = 2 时,最大值是 99; n = 3 时,最大值是999,依次类推,可得出 最大值 = 10^n - 1 。
 所以,此题只需计算出最大值,然后顺序存储到内存中即可。C标准库函数提供了求指数次幂的函数pow(),不过最好可以自行实现,但需要注意输入的n和计算出的最大值不允许超过整型的最大值(INT_MAX)。因为有的系统在运行时不会报整型数据越界错误,会造成程序出现异常,这类异常在实际项目中还蛮难查到凶手。

代码实现

int mypow(int x,int y)
{
    int value = 1;
    int i = 0;
    
    if(y == 0)
    {
        return value;
    }
    if(x == 0)
    {
        return 0;
    }

    while(i < y)
    {
        value = value * x;
        
        if(value >= INT_MAX)
        {
            printf("out of int max range!\n");
            return NULL;
        }
        
        i++;
    }

    return value;


}

int* printNumbers(int n, int* returnSize){

    int end = 0;
    int i = 0;
    int *arr;

    end = mypow(10,n);
    *returnSize = end - 1;

    arr = (int *)malloc(sizeof(int)*end);
    if(arr == NULL)
    {
        return NULL;
    }

    for(i; i < end; i++)
    {
        arr[i] = i+1;
    }

    return arr;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值