题目描述
输入数字 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;
}