游客 Signup | Login
中文 | En

1403 - 数字之和

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

Input

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

Output

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

Examples

Input

4
12
97
39999
0

Output

4 7
3 9
16 22
39 36

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

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

Time Limit 1 second
Memory Limit 32 MB
Discuss Stats
上一题 下一题