您的位置:首页 > 其它

随意写一个十进制的自然数(如2583),然后求这个数目字的平方和(2^2+5^2+8^2+3^2=102),对得出来的数(102)再用此法处理(1^2+0^2+2^2=5),并一直照此进行下去(5^2

2016-11-23 15:15 501 查看
分析:假如输入56,则应该把56拆分为5和6,取余可以将其拆分,我们从后往前来计算会比较方便,56%10 * 56%10 就是6*6,保存这个6*6结果,在将56/10变成5,让5%10*5%10就是5*5,令6*6+5*5保存这个结果,只要这个结果不为145且不为1则继续循环下去

  再次说明:将56拆分为5和6,5的平方+6的平方得到新数,只要这个新数不为145就继续拆分平方

代码:

#include <stdio.h>
main()
{
int i,j,t,n;
scanf("%d",&n);
while ((n!=1)&&(n!=145)&&n)
{
t=(n%10)*(n%10); //最后一个数平方
printf("%d*%d",n%10,n%10);
do
{
n/=10;
printf("+%d*%d",n%10,n%10);
t=t+(n%10)*(n%10);
} while (n/10!=0);
printf("=%d\n",t);
n=t;
}
}
/*
输入56,将56拆分为5和6,5的平方+6的平方的到新数,只要这个新数不为145就继续拆分平方
试数:n=56 t=6*6=36 输出6*6 n = 5 输出+5*5 t=t+5*5 = 36+25=61 5/10==0 跳出循环 输出=61 n=61

n=61 t= 1*1 输出1*1 n=6 输出+6*6 t=1+6*6=37 6/10==0 跳出循环 输出=37 n=37

n=37 t=7*7=49 输出7*7 n=3 输出+3*3 t= 49+3*3==58 3/10==0 跳出循环 输出=58 n=58

n=58 t=8*8=64 输出8*8 n=5 输出+5*5 t=64+5*5=89 5/10==0 跳出循环 输出=89 n=89

n=89 t=9*9=81 输出9*9 n=8 输出8*8 t=81+8*8=145 8/10==0 跳出循环 输出=145 n=145

n=145 不满足条件,程序结束
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐