3661 - 7.位平方和
时间限制 : 1 秒
内存限制 : 128 MB
把一个整数的每个数位都平方后求和,又得到一个整数,我们称这个整数为:位平方和。
对新得到的整数仍然可以继续这一运算过程。
比如,给定整数为4,则一系列的运算结果为:
16,37,58,89,....
本题的要求是,已知一个整数x,求第n步的运算结果。
数据格式要求:
输入,两个整数x n,中间以空格分开。表示求x的第n步位平方和。其中,x,n都大于0,且小于100000。<br />
输出,一个整数,表示所求结果。
例如,<br />
输入:
4 3
则程序应该输出:
58
资源约定:<br />
峰值内存消耗 < 256M
CPU消耗 < 1000ms
<br />
请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意: main函数需要返回0<br />
注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 #include <xxx>, 不能通过工程设置而省略常用头文件。
提交时,注意选择所期望的编译器类型。
<br />
题目输入
题目输出
输入/输出样例
输入格式
输出格式
C语言解答
#include<stdio.h> int main(){ int x,n; int sum; scanf("%d %d",&x,&n); while(n--){ sum=0; while(x!=0){ int t=x%10; sum+=t*t; x/=10; } x=sum; } printf("%d",sum); }
C++解答
#include <iostream> using namespace std; int f(int n) { int S=0; while(n) { S+=(n%10)*(n%10); n/=10; } return S; } int main() { int x,n; cin>>x>>n; while(n--) { f(x); x=f(x); } cout<<x<<endl; return 0; }
Java解答
import java.util.Scanner; public class Main { public static void main(String[] args) { int x,n; Scanner sc=new Scanner(System.in); x=sc.nextInt(); n=sc.nextInt(); int sum=x; while(n-- != 0) { int t=sum; sum=0; while(t > 0) { sum=sum+(t%10)*(t%10); t/=10; } } System.out.println(sum); } }