变种水仙花数求解(C语言,数学方法找下标规律)

一、变种水仙花题目:

把任意的数字,从中间拆分成两个数字,比如1461,可拆分成(1和461)、(14和61)、(146和1),如果所有拆分后的乘积之和等于自身,则是一个变异水仙花数。

二、代码和注释:

#include<stdio.h>
#include<math.h>
int main(){
	int num;
	printf("请输入要检验的数:");
	scanf("%d",&num);
	int arr[11];
	int index =0;
	int temp = num;
	int i;
	int j;
	
	// 将要验证的数,一位一位存在数组中 655存了后,相当于arr = {5,5,6} 
	while(temp){
		arr[index] = temp%10;
		temp/=10;
		index++;
	}

	int sum =0;	
	// 这段为核心代码
	// 纯数学找规律总结下标与变异水仙花的关系
	// 可带入输入的数为655(该数为变异水仙花数,6*55+65*5)
	// 可算算体验下,由简入繁,可意会、可实践带入,难言传清楚 
	for(i=0;i<index-1;i++){
		int t1=0;
		int flag = index-1;
		int flag2 = index-1-i;
		for(int j=0;j<i+1;j++){
			t1+=arr[index-j-1]*pow(10,flag-flag2);
			flag--;
		}
		int t2 = 0;
		for(j=i+1;j<index;j++){
			t2+=arr[index-j-1]*pow(10,index-j-1);
		}
		sum+=t1*t2;
	}
	
	if(sum==num){
		printf("是变异水仙花");
	}else{
		printf("不是变异水仙花");
	}
	return 0;
}

三、运行结果验证: 

验证655、1461、14610、16420、23610、34420、65500(这些已知是变种水仙花数):

 

 

 

 随便输入一个不是变种水仙花的数,进行验证(如22222):

 

 四、方法二代码:

更为巧妙的数学解法

#include<stdio.h>
int main(){
	long num;
	printf("请输入要验证的数:");
	scanf("%ld",&num);
	int k=10;
	int n1=num/k;
	int sum;
	int n2;
	while(n1!=0)
	{	n2=num%k;
		sum+=n1*n2;
		k*=10;
		n1=num/k;
	}
	if(sum==num){
		printf("是变种水仙花数");
	}else{
		printf("不是变种水仙花数");
	} 
	return 0;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值