前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用c语言求素数,完全,水仙花,回文,阿姆斯特朗数

用c语言求素数,完全,水仙花,回文,阿姆斯特朗数

作者头像
用户11288949
发布2024-09-24 13:15:37
760
发布2024-09-24 13:15:37
举报
文章被收录于专栏:学习

1.求素数

1.素数的原理:判断一个数是否为素数的基本原理是:一个大于 1 的自然数,如果除了 1 和它自身外,不能被其他自然数整除(即不能被其他数除尽,余数不为 0),那么这个数就是素数。

2.思路:小编的思路是素数既然只能被两个数字整除,那就判断一个数被整除次数只能为二,那么就要用两个for循环,第一个来表示取100以内的值,第二个for循化来从一除到取值。例如判断8是不是素数,那么就从1,2,3,4,5,6,7,8来分别进行除法,能被整除的有4个1,2,4,8.所以8不是素数。

3.代码如下:

代码语言:javascript
复制
#include<stdio.h>
//找素数
int main() {
	for (int i = 1; i <= 100; i++)//规定一百以内的数字
	{
		int a = 0;
		for (int j = 1; j <= i; j++)//不断将i的值从一除到他自己本身
		{

			if (i % j == 0)
			{
				a++;//素数能够被整除就只有1和自己两个数字
			}
		}
		if (a == 2 || a == 1)
		{
			printf(" %d\n", i);
		}
	}
	return 0;

}

淡然小编还在if语句单独判断了1这个特殊数字,每次循环后别忘了重置a的值为0。

2.求完全数

1.完全数的原理:完全数是指所有真因子(即除了自身以外的约数)的和恰好等于它本身的数。

2.思路:小编认为完全数与素数的写法基本一致,在第二个循环中判断能否被除尽,即取模为0;如果为0,那么就相加,保存在一个变量里。

3.代码如下:

代码语言:javascript
复制
#include<stdio.h>
int main()
{
	
	for (int i = 1; i < 100; i++)
	{
		int a=0;
		for (int j = 1; j < i; j++)
		{
			if (i%j==0)        //判断是否被除尽
			{
				a = a + j;
			}
		}
		if (a == i) {         //判断是否满足完全数的条件
			printf(" %d", i);  
		}
	}
}

当然,还是别忘记重置a的值。

3.水仙花数

1。水仙花数原理:水仙花数是指一个三位数,其每个数位上的数字的立方和等于该数本身。 原理在于对三位数进行数位拆分,分别获取百位、十位和个位上的数字,然后计算这三个数字的立方和,并与原数进行比较。 例如,对于三位数 153,百位数字是 1,十位数字是 5,个位数字是 3。计算 1³ + 5³ + 3³ = 1 + 125 + 27 = 153,所以 153 是水仙花数。

2.思路:小编认为既然要求各个数位上的3次方的和,那么就用整数除法取整和取模来表示出各个位数的值。

3.代码如下:

代码语言:javascript
复制
#include<stdio.h>
int main() 
{
	int a, b, c, d,sum;
	for (int i = 100; i < 1000; i++)
	{
		a = i / 10;
		b = i % 10;//个位数
		c = a % 10;//十位数
		d = i / 100;//百位数
		sum = b * b * b + c * c * c + d * d * d;
		if (sum == i) {
			printf(" %d", i);
		}
	}
}

4.回文数

1.回文数原理:回文数是指正读和反读都相同的整数。 其原理在于数字的对称性。对于一个整数,通过将其各位数字进行反转,然后与原数字进行比较,如果相等,则为回文数。 例如,数字 121,将其反转得到 121,与原数字相同,所以 121 是回文数;而 123 反转后为 321,与原数字不同,所以 123 不是回文数。

2.思路:小编认为既然要求回文,那么就得抓住数字翻转后还是与原来的数字一样,那么个位变成百位即最高次位,以此类推咧如一个三位数123翻转后就是321,即3 到 3*10+2 到 32*10+1;在与原来的数相比较。且要在while循环中对应不同的位数。

3.代码如下:

代码语言:javascript
复制
#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>
int isPalindrome(int num) {
    int originalNum = num;
    int reversedNum = 0;

    while (num > 0) {
        reversedNum = reversedNum * 10 + num % 10;//实现数字的逆转
        num /= 10;                                //实现跳出循环
    }

    if (originalNum == reversedNum) {
        return 1;
    }
    else {
        return 0;
    }
}

int main() {
    int num;
    printf("请输入一个整数: ");
    scanf("%d", &num);

    if (isPalindrome(num)) {
        printf("%d 是回文数\n", num);
    }
    else {
        printf("%d 不是回文数\n", num);
    }

    return 0;
}

由于小编用的vs2022编程,所以scanf函数不安全得加#define _CRT_SECURE_NO_WARNINGS

5.阿姆斯特朗数

1.阿姆斯特朗数的原理(也称自恋数):阿姆斯特朗数(也称为自恋数)是指一个 n 位数,其各位数字的 n 次幂之和等于该数本身。  其原理在于对数字进行位的分解,获取每一位上的数字,然后按照位数进行相应的幂运算,并将这些幂运算的结果相加,最后与原数进行比较。 例如,三位数的阿姆斯特朗数 153,因为 1³ + 5³ + 3³ = 1 + 125 + 27 = 153。 再如,四位数的阿姆斯特朗数 1634,1⁴ + 6⁴ + 3⁴ + 4⁴ = 1 + 1296 + 81 + 256 = 1634 

2.思路:小编认为在判断几次幂的时候就涉及到求输入数字的位数。

第二步就是求出各个位数上的值,并用循环求出对应位数的几次幂,最后相加就好了。

3.代码如下:

小编这里还是采用的是用while循环,在输入数字不断除以10的情况下小于0截止。

对于第一个for循环来表示各个位数进行幂运算后相加,第二个for循环来表示进行位数的幂运算。

代码语言:javascript
复制
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int countNumber(int number)
{
	int count = 0;
	int a,sum=1,sumber=0;
	int saveNumber = number;
	while (number > 0)
	{
		number /= 10;
		count++;
	}
	printf("%d位数\n", count);
	for (int i = 0; i < count; i++)
	{
		a = saveNumber % 10;
		saveNumber=saveNumber / 10;
		for (int j = 0; j < count; j++)
		{
			sum = sum * a;
		}
		sumber = sumber + sum;
	
		sum = 1;
	}
	return sumber;
}
int main()
{
	int number;
	scanf("%d", &number);
	int count = countNumber(number);
	if (count == number)
	{
		printf(" %d是阿姆斯特朗数", number);
	}
	else
	{
		printf("%d不是阿姆斯特朗数",number);
	}
	return 0;
}

记得每次进行完位数的幂运算后sum要归位1;

6.总结

对于每个特殊数字的求法来说,要抓住每个数字求法的原理,熟练运用for循环嵌套,想明白如何用代码实现原理,咧如我们要求各个位数上的几次幂,就要求各个数位上的值为多少,就要用模运算。

当然小编能力还不够,这些算法时间复杂度可能不小,或者代码调试不完整,希望个位uu提出宝贵意见。

看到这里了麻烦给小编一个小小的赞,鼓励一下吧。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-08-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.求素数
  • 2.求完全数
  • 3.水仙花数
  • 4.回文数
  • 5.阿姆斯特朗数
  • 6.总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档