每日一题吼吼吼(打印从1到最大n位数,计算是第几天)

简介: 每日一题吼吼吼(打印从1到最大n位数,计算是第几天)

快过年了,咱们这代码的功夫不能停,特此推出一日一题特别栏目,欢迎您的光临~(乱入)俺写的解析超级详细,超级适合刚上路的新手!

打印从1到最大的n位数_牛客题霸_牛客网 (nowcoder.com)

计算日期到天数转换_牛客题霸_牛客网 (nowcoder.com)

static int a[100010];
int* printNumbers(int n, int* returnSize ) {
    int k=1;
    for(int i=0;i<n;i++){
        k*=10;//每循环一次k就乘以一次10
}
    int i;
    for(i=1;i<k;i++)
        a[i-1]=i;
    *returnSize=--i;
    return a;
}

这就是这个程序的解法啦!

这段代码定义了一个函数 printNumbers,这个函数返回一个整数数组,其中包含从1到k-1的整数,其中k是10的n次方。函数还返回一个指向该数组大小的指针。下面是对代码的逐行解释:

  1. static int a[100010];这行代码定义了一个静态整型数组 a,大小为100010。静态意味着这个数组只会被初始化一次,即使在函数调用之间也不会被重置。
  2. int* printNumbers(int n, int* returnSize ) 这是函数的声明。函数名为 printNumbers,它接受两个参数:一个整数 n 和一个指向整数的指针 returnSize。int*表明:函数的返回类型是整数指针。
  3. int k=1;定义并初始化一个整数变量 k,并赋值为1。这个变量将用于计算10的n次方。
  4. for(int i=0;i<n;i++)这是一个for循环,从0开始,直到i小于n。每次循环,i的值会增加1。
  5. k*=10;这行代码将 k 的值乘以10。通过这个循环,我们最终会得到一个变量 k,其值为10的n次方。这样我们就可以打印出所有范围内的数值啦!
  6. int i;定义一个整数变量 i。这个变量将用于后面的循环。
  7. for(i=1;i<k;i++)这是另一个for循环,从1开始,直到i小于k。每次循环,i的值会增加1。这个循环的目的是填充数组 a
  8. a[i-1]=i;这行代码将 i 的值赋给数组 a 的位置 i-1。由于数组是从0开始索引的,所以我们需要减去1来正确地填充数组。
  9. *returnSize=--i;这行代码首先将 i 的值减少1(通过前缀递减操作)。然后,它将这个新值赋给指针 returnSize 所指向的地址。这实际上是返回数组的大小(即数组中元素的数量)。
  10. return a;这行代码返回数组 a 的指针。因为数组是静态的,所以这个指针在整个程序执行期间都有效。

#include <stdio.h>  
  
int is_leapyear(int year) {  
    if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {  
        return 1;  //是闰年,返回真
    } else {  
        return 0;  //不是闰年,返回假
    }  
}  
  
int day_of_year(int year, int month, int day) {  
    int days_in_month[] = {0, 31, (is_leapyear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};  
    int total_days = 0;  
    for (int i = 1; i < month; i++) {  
        total_days += days_in_month[i];  
    }  
    total_days += day;  
    return total_days;  
}
  
int main() {  
    int year;  
    int month;  
    int day;  
    while (scanf("%d %d %d", &year, &month, &day) != EOF) {  
        int day_of_year_number = day_of_year(year, month, day);  
        printf("The date is the %dth day of the year.\n", day_of_year_number);  
    }  
    return 0;  
}

首先用一个函数计算出某天是一年里面的第多少天,但是2月份比较特殊,会依据是否是闰年来出现对应的天数。所以我们用一个三目运算操作符来判断2月份有多少天。 还需要注意的一点是:数组是从0开始的,但是用户在输入1月份一定会对应到下标为1的天数,这就不符合我们的预期,所以我们将下标为0的数值设为0,这样就既不会对计算的天数造成影响,也不会因为输入月份的错误导致对应的天数错误。再用一个循环,把这个月份之前的天数都相加,再加上这个月份的天数。就可以得到是第几天。

相关文章
|
4月前
【每日一题Day359】LC2520统计能整除数字的位数 | 数学模拟
【每日一题Day359】LC2520统计能整除数字的位数 | 数学模拟
29 0
|
12天前
leetcode 2520 统计能整除数字的位数
leetcode 2520 统计能整除数字的位数
4 0
|
2月前
11.09作业详解(弹球距离,素数,最大公约数最小公倍数,求整数位数及其各位数字之和,打印乘法表)
11.09作业详解(弹球距离,素数,最大公约数最小公倍数,求整数位数及其各位数字之和,打印乘法表)
|
4月前
[leetcode 数位计算]2520. 统计能整除数字的位数
[leetcode 数位计算]2520. 统计能整除数字的位数
|
6月前
OJ题库:计算日期到天数转换、打印从1到最大的n位数 、尼科彻斯定理
OJ题库:计算日期到天数转换、打印从1到最大的n位数 、尼科彻斯定理
32 0
|
9月前
|
C语言
C语言:获得月份天数(多组输入)-1
描述 KiKi想获得某年某月有多少天,请帮他编程实现。输入年份和月份,计算这一年这个月有多少天。 输入描述: 多组输入,一行有两个整数,分别表示年份和月份,用空格分隔。 输出描述:
145 0
|
9月前
|
存储 C语言
C语言:获得月份天数(多组输入)-2
思路二:用数组存储各月的日期 总体思路: (一). 写一个函数 get_days_of_month 返回对应月份天数:
每日一题——输入一个日期,输出它是该年的第几天
哈喽大家好,我是保护小周ღ,本期为大家带来的是编程实现输入某年某月某日,输出它是这一年的第几天,一起来看看把~
187 0
【C语言】(错题整理) 寻找完数、字符串中各类字符数的统计、最大公约数和最小公倍数、回文数计算 (循环、函数相关内容)
本篇博客旨在整理最近在头歌遇到的难题、错题,对其进行分析并整理。 一、循环 1.寻找完数(计算因子例题) 一个数如果恰好等于它的因子之和,这个数就称为"完数"。 例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。 编程序找出1000之内的所有完数。 这道题的首要任务就是找到各个数的因子,然后再对其进行判断。那么计算这个数的因子,我们可以用循环,试每个小于它的数对其进行求余%,结果为零即是因子。
PTA 1022 D进制的A+B (20 分)
输入两个非负 10 进制整数 A 和 B (≤2 30 −1),输出 A+B 的 D (1<D≤10)进制数。
47 0