#eoj&每日错题 今天学到了malloc

#eoj&每日错题 今天学到了malloc

题目:
#2006 孤独数

如果一个正整数 a 能够被表示为另外一个正整数 b 与 b 各位数字的和,那么我们认为这个数不是孤独的。现在的问题就是想让你求出所有不大于 1 000 000 的孤独数。比如 46 不是孤独数,因为 46=41+4+1。

输出格式

从小到大输出孤独数,每行一个。

3.30更新:
malloc的用处是用完好删除,不会浪费,而且可以根据程序需要动态申请大小
同学告诉我可以不用malloc
malloc主要的作用是动态申请大小,比如要一个a[n],这个n可以是100也可以是100000000,那就要用malloc,不然n=100的时候a[100000000]就很浪费
但是如果可以肯定会用这么大的话,就直接开一个数组在全局空间(在函数之前)

int a[100000]={0};
int main(){
……
}

3.29



代码:
```cpp

#include<malloc.h>
#include<stdio.h>
#include<stdbool.h>

int main()
{
int *p,k;
p = (int*)malloc(sizeof(int)*1000000);
for(int i=1;i<=1000000;i++)
{p[i-1]=i;}
for(int i=1;i<=1000000;i++)
{
int sum;
k=i;
while(k)  //这里要注意,借助k来代替i,不然在循环过程中i也被改变了
{
sum+=k%10;
k/=10;
}
p[i+sum-1]=0;
sum=0;
}
for(int i=0;i<=999999;i++)
{
if(p[i])
printf("%d\n",p[i]);
}
return 0;
}



malloc 函数其实就是在内存中:找一片指定大小的空间,然后将这个空间的首地址给一个指针变量,这里的指针变量可以是一个单独的指针,也可以是一个数组的首地址, 这要看malloc函数中参数size的具体内容。我们这里malloc分配的内存空间在逻辑上是连续的,而在物理上可以不连续。我们作为程序员,关注的 是逻辑上的连续,其它的,操作系统会帮着我们处理的。


参考链接:
https://blog.csdn.net/wang13342322203/article/details/80862382
题目链接:
https://acm.ecnu.edu.cn/problem/2006/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值