1403 - 数字之和

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 32 MB

对于给定的正整数 n,计算其十进制形式下所有位置数字之和,并计算其平方的各位数字之和。

题目输入

每行输入数据包括一个正整数n(0<n<40000),如果n=0 表示输入结束,并不用计算。

题目输出

对于每个输入数据,计算其各位数字之和,以及其平方值的数字之和,输出在一行中,之间用一个空格分隔,但行末不要有空格。

输入/输出样例

输入格式

4
12
97
39999
0

输出格式

4 7
3 9
16 22
39 36

C语言解答

#include<stdio.h>
int add1(int n)
{
    int i,s=0,k=10;
    for(i=1;i<5;i++)
    {
        s=n%k+s;
        n=n/10;
    }
    s=s+n;
    return s;
}
int add2(int n)
{
    int i,s=0,k=10;
    for(i=1;i<10;i++)
    {
        s=n%k+s;
        n=n/10;
    }
    s=s+n;
    return s;
}
int main()
{
    int n,i,s,p;
    while(scanf("%d",&n)!=EOF)
    {
        if(n==0)
        break;
        s=add1(n);
        n=n*n;
        p=add2(n);
        printf("%d %d\n",s,p);
    }
}

C++解答

#include <stdio.h>

int SeparateDigits(int num, int arr[]){
	int numOfDigits = 1;
	arr[0] = 0;
	while(num){
		arr[numOfDigits++] = num % 10;
		num /= 10;
	}
	return numOfDigits;
}

int main(){
#ifndef ONLINE_JUDGE
	freopen("in", "r", stdin);
#endif

	int digits[20];
	int num;
	while(scanf("%d", &num), num){
		int numOfDigits = SeparateDigits(num, digits);
		int ans = 0;
		for(int i=0; i<numOfDigits; i++){
			ans += digits[i];
		}
		numOfDigits = SeparateDigits(num*num, digits);
		int squareAns = 0;
		for(int i=0; i<numOfDigits; i++){
			squareAns += digits[i];
		}
		printf("%d %d\n", ans, squareAns);
	}

	return 0;
}

Java解答

import java.util.Scanner;



public class Main
{
	Scanner	input=new Scanner(System.in);
	int num=0;
	int sum=0;
	int sumofsquare=0;
	int square=0;
	public Main()
	{
		while(input.hasNextInt())
		{
			num=input.nextInt();
			sum = 0;
			sumofsquare=0;
			square = 0;
			square=num*num;
			if(num==0)
				break;
			else
			while(num>0)
			{
				sum+=num%10;
				num=(int)num/10;
			}
			while(square>0)
			{
				sumofsquare+=square%10;
				square=(int)square/10;
			}
			System.out.println(sum+" "+sumofsquare);
		}
	}
	public static void main(String[] args)
	{
		Main main=new Main();
	}
}