3661 - 7.位平方和

通过次数

0

提交次数

0

时间限制 : 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 />

 

&nbsp;

题目输入

题目输出

输入/输出样例

输入格式


                        

输出格式


                        

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);
	}

}