1403 - 数字之和

对于给定的正整数 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;
}

时间限制 1 秒
内存限制 32 MB
讨论 统计
上一题 下一题