#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/