Leetcode30days题目day2开心数

本文介绍了如何通过计算一个数的各位数平方和来判断它是否为开心数,并提供了C语言的代码实现过程。通过位数分离和循环求和,实现对输入数字的判断。
摘要由CSDN通过智能技术生成

什么是开心数

通过计算一个数的各位数平方和的方式,当所有的平方和累加起来等于1时,这个数被称为开心数。

例如: 19 =》    1*1 + 9 *9 = 82    =》    8*8 + 2*2  = 68   =>   6*6 + 8*8  = 100 =>  1*1 + 0*0 + 0*0 = 1   最终结果是1   则说明19这个数是开心数

实现思路

数字每一位分离

如何分离一个数字的每一位数字哪?

    /  10  % 10   ;首先第一次 是  / 1  %10

后面依次是  / 10  %10    / 100 %10  / 1000 %10.

将一个变量 如 m   看成是 1  10  100  1000;就是  每次 分离后  m = m  * 10;

s = (a / m ) % 10;
   		m *= 10;

s是每次的位数   a 是输入的数字;

循环求和

在每次位数确定后将每次位数的平方加和

sum += s*s;

完整的求取每一位并加和代码如下

for(i = 1;i <= count;i++)                 //循环求每一位的平方并加和 
   	{
   		s = (a / m ) % 10;
   		m *= 10;
   		sum += s*s;
	   }

count是什么意思?count是位数决定循环的次数;

确定位数

 while(x>=1)                       // 确定位数 
   	  {
   	  	 x = x /10;
   	  	 count++;
		 }	   

x是与输入的数相同的值  用来做确定位数的功能

循环求和判断

利用while循环当加和不是1时一直循环直到是1为止

while(sum != 1)

完整代码展示及结果示例

#include <stdio.h>

int main()
{
     int n;
     scanf("%d",&n);
    int result= fun(n);
    
    if(result == 1)                          // 判断result是否为1 
    {
     	printf("该数是开心数!");
    }
	else
	{
		printf("该数不是开心数!");
    }

     return 0;
}
int fun(int x)                           //传参数 x是形参 
{ 
  int sum = 0;                              
  while(sum != 1){                            / 循环判断计算sum是否是为1
   
   int a = x;
   int m  = 1;
   int count = 0;
   int i = 1;
   int s=0;
    sum = 0;
    
   	  while(x>=1)                       // 确定位数 
   	  {
   	  	 x = x /10;
   	  	 count++;
		 }	   
   	  for(i = 1;i <= count;i++)                 //循环求每一位的平方并加和 
   	{
   		s = (a / m ) % 10;
   		m *= 10;
   		sum += s*s;
	   }
   	
   	     x = sum;  	    
}  	
   return sum;                             // 返回 
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

PYGG

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

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

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

打赏作者

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

抵扣说明:

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

余额充值