会绕圈的数(设立flag控制循环)

任务:会绕圈的数
描述:任意一个正整数,把它的每一位数字平方后
得到一个数;将这个数的每一位数字再平方
相加;依次进行就会产生循环现象。
条件:当出现循环数字时,停止运行程序
输入:一个正整数m,直至输入m=0时停止输入
输出:打印出出现循环为止的所有数

思路:每计算出一个数字进行查重,若有相同的数flag控制停止循环

#include<stdio.h>
#define N 200
int Sum(int m);
int main()
{
	int m;                         //输入整数m 
	int a[N][N]={0},b[N],c[N];     /*a的数组 录入m以及到出现循环前各位数的平方和,b[N]计出现
	                                 几次循环,将m录入c数组*/ 
	
	int sum=0;                     //用于计算各位数的平方和 
	int flag=1;                    
	int i=0,j=0,k,count=0;        //计数 
	
    while(1)
    {
    	scanf("%d",&m);
    	c[count++]=m;
    	if(m==0) break;
    }
    
    for(i=0;i<count;i++)
    {
    	flag=1;j=0;
    	m=c[i];
    	while(flag)                        //当循环数字出现时将不再录入各位数平方和所得数字,即while循环停止则需用flag 
    	{
    		a[i][j++]=m;                  //在输出时需输出原m的值 
    		m=Sum(m);                     //m依次被赋值为各位数的平方和 
    		for(k=0;k<j-1;k++)
    		{
    			if(a[i][j-1]==a[i][k])
    			{
    				flag=0;
    				b[i]=j;
    				break;              //控制当循环数出现时将不再查找 
				}
    	    }
		}
	}
	
	for(i=0;i<count-1;i++)
	{
		for(j=0;j<b[i];j++)
		printf("%d ",a[i][j]);
		printf("\n");
	}
		   
	return 0;
		
 } 
 
 int Sum(int m)                   //各位数的平方和 
 {
 	int a;
 	int sum=0;
 	while(m>0)
 	{
 		a=m%10;
 		sum=sum+a*a;
 		m=m/10;
	 }
	 return sum;
 }
	 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

流云枫木

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

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

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

打赏作者

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

抵扣说明:

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

余额充值