练习:“快乐数”判断

练习:“快乐数”判断

        APP发文编辑机制更新后,慢热的我还适应不来。😋这里只放了 python 代码,运行效果和题目,请点击前面蓝色文字,移步我昨天的“学习打卡”帖。

Pyonth 代码:

# coding: utf-8
from random import randint


def ishappy_number(n):
    '''“快乐数”判定'''
    n_list = list(map(int, list(str(n)))) #解析生成整数各数位列表。
    sqrt_sum = 0 #整数各数位平方和初始化。
    for i in n_list: #遍历整数各数位列表求平方和。
        sqrt_sum += i**2 #平方和累加。
    if sqrt_sum == 1: #当平方和为1,证明是“快乐数”,返回True。
        return True
    try: #当递归到python限制递归深度1000时报错都没得到平方和为1,证明不是“快乐数”,返回False。
        return ishappy_number(sqrt_sum)
    except Exception as error:
        return False


nums = [randint(1, 2**31 - 1) for i in range(10)] #解析10个1~2**31 - 1的随机数。
for num in nums: #遍历10个随机整数,判断“快乐数”。
    print(f'\n\n\n{"快乐数判定":_^37}\n\n\n\n{num:>18} :{ishappy_number(num)}\n\n\n\n{"The End":_^42}\n')

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在指针练习:memcpy之二中,我们继续学习和练习memcpy函的用法和应用。 memcpy函是C语言中非常常用的一个内存拷贝函,它可以将一个内存区域的据拷贝到另一个内存区域。memcpy函的原型如下: void *memcpy(void *dest, const void *src, size_t n); 其中,dest是目标内存区域的指针,src是源内存区域的指针,n是要拷贝的字节。这个函的返回值是目标内存区域的指针。 我们可以通过memcpy函来实现一些常见的操作,比如复制组、结构体等。下面是一个例子: ```c #include <stdio.h> #include <string.h> struct Student { int age; char name[20]; }; int main() { struct Student stu1 = {20, "Tom"}; struct Student stu2; memcpy(&stu2, &stu1, sizeof(struct Student)); printf("stu2: age=%d, name=%s\n", stu2.age, stu2.name); return 0; } ``` 在这个例子中,我们定义了一个结构体Student,其中包含一个整型的age和一个字符组的name。然后我们创建了两个结构体变量stu1和stu2,将stu1中的据拷贝到stu2中。使用memcpy函时,我们需要传入源内存区域和目标内存区域的指针,以及要拷贝的字节,这里使用了sizeof操作符来获取结构体的大小。 在最后打印出来的结果中,我们可以看到stu2成功地复制了stu1中的据。 通过这个例子,我们可以看到memcpy函在实际工程中的应用。它可以方便地进行内存拷贝操作,帮助我们更好地管理和处理据。 ### 回答2: 在C语言中,指针是一种非常重要的据类型,可以用来间接访问内存中的据。指针的使用需要注意内存的管理,避免出现悬空指针、内存泄漏等问题。 memcpy是C语言中常用的内存拷贝函,用于将指定内存块中的据复制到另一个内存块中。其函原型为:void *memcpy(void *dest, const void *src, size_t n),其中dest为目标内存块的起始地址,src为源内存块的起始地址,n为要拷贝的字节。 为了练习memcpy函的使用,我们可以编写一个程序,实现自定义的拷贝函。 首先,我们需要定义一个自定义的拷贝函,如下所示: void my_memcpy(void *dest, const void *src, size_t n) { char *d = dest; // 将目标指针转为字符指针 const char *s = src; // 将源指针转为字符指针 while (n--) { *d++ = *s++; // 逐个字节复制 } } 在主函中,我们可以声明两个组,分别作为源和目标内存块,然后调用自定义的拷贝函进行拷贝。示例代码如下: #include <stdio.h> #include <string.h> void my_memcpy(void *dest, const void *src, size_t n) { char *d = dest; const char *s = src; while (n--) { *d++ = *s++; } } int main() { char src[20] = "Hello, world!"; char dest[20] = {}; my_memcpy(dest, src, strlen(src) + 1); printf("源内存块的内容为:%s\n", src); printf("目标内存块的内容为:%s\n", dest); return 0; } 以上代码实现了自定义的拷贝函my_memcpy,并在主函中进行了测试。运行程序后,会输出源内存块和目标内存块的内容,验证了拷贝函的正确性。 通过练习使用memcpy函,我们可以更好地理解指针的使用和内存拷贝的机制。同时,也可以进一步加深对内存管理的认识和理解。 ### 回答3: 在指针练习中,我们继续探讨`memcpy`函的用法。`memcpy`函用于在内存中复制一段指定长度的据,并将其传递给另一个指针。这对于需要在不同变量之间复制据非常有用。 `memcpy`函的用法如下: ``` void* memcpy(void* destination, const void* source, size_t num); ``` 其中,`destination`是目标指针,`source`是源指针,`num`表示要复制的字节。该函会将源指针指向的内存据复制到目标指针指向的内存中。 下面是一个示例程序: ```c #include <stdio.h> #include <string.h> int main() { char source[] = "Hello, World!"; char destination[20]; // 使用memcpy函将source中的据复制到destination中 memcpy(destination, source, strlen(source) + 1); // 打印目标字符串 printf("目标字符串:%s\n", destination); return 0; } ``` 在该示例中,我们声明了一个源字符串`source`和一个目标字符串`destination`。然后,我们使用`memcpy`函将源字符串中的据复制到目标字符串中。需要注意的是,我们必须指定要复制的字节,这里我们使用了`strlen(source) + 1`来确保复制整个字符串,并且包含末尾的`\0`字符。 最后,我们打印目标字符串,验证复制操作是否成功。 通过这个练习,我们可以更深入地理解指针和内存操作的概念,以及如何使用`memcpy`函进行据复制。这对于处理复杂的据结构和进行内存操作的程序来说非常重要。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦幻精灵_cq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值