蓝桥杯—平方怪圈 算法分析
题目 ——– 平方怪圈
如果把一个正整数的每一位都平方后再求和,得到一个新的正整数。
对新产生的正整数再做同样的处理。
如此一来,你会发现,不管开始取的是什么数字,
最终如果不是落入1,就是落入同一个循环圈。
请写出这个循环圈中最大的那个数字。
请填写该最大数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
- #include<iostream>
- using namespace std;
- int main()
- {
- int i, n, j, ans=0;
- cin>>n;
- for(i=0;i<50;i++) //循环多少次 随便写
- {
- while(n!=0)
- {
- j=n%10;
- ans+=j*j;
- n/=10;
- }
- printf(“ans=%d\n”,ans);
- n=ans;
- ans=0;
- }
- return 0;
- }
答案是 145 自己运行一下就知道了
解出这道题 其实并不重要 重要的解这道题发现一种方法
怎么才能快速的知道任何一个正整数每一位上的数是几?
看下面这段程序:
- while(n!=0)
- {
- j=n%10;
- n/=10;
- }
分析一下 很容易就知道了 其实j 在这个循环中依次代表n 这个整数每一位上的数,从个位开始。
不管这个整数多大,这个方法都可以用。是不是很简单呢?