#include
int fun(int x,int r)
{int a=0;
while(x)
{a+=x%r;
x=x/r;
}
return a;
}
int main()
{int S1,S2,S3,i=0;
S1=S2=S3=0;
for(i=2992;i<=9999;i++)
{S1=fun(i,10);
S2=fun(i,12);
S3=fun(i,16);
if(S1==S2&&S2==S3)
printf("%d\n",i);}
return 0;
}
要求把输出2991到9999内十进制,十二进制和十六进制各个数的和相等的数,但我这个是输出结果是这样的
你可以对比一下我的代码:
#include <stdio.h>
int sum_of_digits(int n, int base) {
int sum = 0;
while (n > 0) {
sum += n % base;
n /= base;
}
return sum;
}
int main() {
int i;
for (i = 2991; i <= 9999; i++) {
int sum10 = sum_of_digits(i, 10);
int sum12 = sum_of_digits(i, 12);
int sum16 = sum_of_digits(i, 16);
if (sum10 == sum12 && sum12 == sum16) {
printf("%d\n", i);
}
}
return 0;
}
输出结果为:
2992
2993
2994
2995
2996
2997
2998
2999
3555
3661
3772
3883
3994
4888
4999
5561
5572
5583
5594
5662
5673
5684
5695
5885
5896
5999
例如结构体用来保存学生的姓名和年龄, 通过控制台来录入,在不知道具体会录入多少学生的情况下就需要动态来申请堆内存了,这里会用到realloc来申请。效果图如下所示:
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct student
{
char *name;
int age;
};
int main()
{
struct student *p = NULL;
int i = 1;
while (1) // 死循环
{
char tmp[1024] = {0};
printf("please input your name\n");
scanf("%s", tmp);
if (strcmp("exit", tmp) == 0)
break; // 输入exit退出
// 动态申请结构体的内存大小,第一次p=NULL,相当于malloc, 之后每次增加一个结构体的大小
p = realloc(p, sizeof(struct student) * i);
// 给name指针成员分配内存
int len = strlen(tmp);
// 因为申请的结构体内存是连续的,所以可以通过操作数组的方式来操作
p[i - 1].name = malloc(len + 1);
// 赋值name
strcpy(p[i - 1].name, tmp);
// 赋值age
printf("please input your age\n");
scanf("%d", &p[i - 1].age);
i++;
}
// 输出
int a;
for (a = 0; a < i - 1; a++)
{
printf("name=%s,age=%d\n", p[a].name, p[a].age);
free(p[a].name); // 释放name指针的内存
}
free(p); // 释放结构体的内存
return 0;
}