快过年了,咱们这代码的功夫不能停,特此推出一日一题特别栏目,欢迎您的光临~(乱入)俺写的解析超级详细,超级适合刚上路的新手!
打印从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
次方。函数还返回一个指向该数组大小的指针。下面是对代码的逐行解释:
static int a[100010];
这行代码定义了一个静态整型数组 a
,大小为100010。静态意味着这个数组只会被初始化一次,即使在函数调用之间也不会被重置。
int* printNumbers(int n, int* returnSize )
这是函数的声明。函数名为 printNumbers
,它接受两个参数:一个整数 n
和一个指向整数的指针 returnSize
。int*表明:函数的返回类型是整数指针。
int k=1;
定义并初始化一个整数变量 k
,并赋值为1。这个变量将用于计算10的n次方。
for(int i=0;i<n;i++)
这是一个for循环,从0开始,直到i
小于n
。每次循环,i
的值会增加1。
k*=10;
这行代码将 k
的值乘以10。通过这个循环,我们最终会得到一个变量 k
,其值为10的n次方。这样我们就可以打印出所有范围内的数值啦!
int i;
定义一个整数变量 i
。这个变量将用于后面的循环。
for(i=1;i<k;i++)
这是另一个for循环,从1开始,直到i
小于k
。每次循环,i
的值会增加1。这个循环的目的是填充数组 a
。
a[i-1]=i;
这行代码将 i
的值赋给数组 a
的位置 i-1
。由于数组是从0开始索引的,所以我们需要减去1来正确地填充数组。
*returnSize=--i;
这行代码首先将 i
的值减少1(通过前缀递减操作)。然后,它将这个新值赋给指针 returnSize
所指向的地址。这实际上是返回数组的大小(即数组中元素的数量)。
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,这样就既不会对计算的天数造成影响,也不会因为输入月份的错误导致对应的天数错误。再用一个循环,把这个月份之前的天数都相加,再加上这个月份的天数。就可以得到是第几天。