首页 > 试题广场 >

数字之和

[编程题]数字之和
  • 热度指数:7081 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
对于给定的正整数 n,计算其十进制形式下所有位置数字之和,并计算其平方的各位数字之和。

输入描述:
每行输入数据包括一个正整数n(0<n<40000)


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

输入

4
12
97
39999

输出

4 7
3 9
16 22
39 36

python solution:


while True:
    try:
        a=input()
        if a!="0":
            print(str(sum(map(int,list(a))))+" "+str(sum(map(int,list(str(int(a)**2))))))
    except:
        break
发表于 2017-10-03 19:53:21 回复(0)
#include<iostream>
#include<cmath>
using namespace std;

int Count(int num)
{
    if(num<=9) return num;
    int sum=0;
    while(num>0)
    {
        sum+=num%10;
        num/=10;
    }
    return sum;
}

int main()
{
    int number;
    while(cin>>number)
    {
        if(number==0) break;
        cout<<Count(number)<<" "<<Count(number*number)<<endl;
    }
    return 0;
}

发表于 2016-08-22 21:51:19 回复(0)
#include<stdio.h>
int main(){
    int sum1=0,sum2=0,n,s;
    while(scanf("%d",&n)!=EOF){
        sum1=0,sum2=0; //重置变量
        s=n*n;
        while(n>0||s>0){
            sum1 += n%10;
            sum2 += s%10;
            n = n/10;
            s = s/10;
        }
        printf("%d %d\n",sum1,sum2);
    }
}

发表于 2021-12-26 22:45:03 回复(0)
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        int sum1=0,sum2=0,k;
        k=n*n;
        do
        {
            sum1+=n%10;
            n/=10;
        }while(n!=0); 
        do
        {
            sum2+=k%10;
            k/=10;
        }while(k!=0); 
        
        printf("%d %d\n",sum1,sum2);   
    }
    return 0;
}

发表于 2020-04-08 09:54:35 回复(0)
#include<stdio.h>
int main()
{
    int n,p=0,q=0,a[10],i,num=0;
    scanf("%d",&n);
    int n1=n*n;
    while(n)
    {
        a[num]=n%10;
        n=n/10;
        num++;
    }
    for(i=0;i<num;i++)
        p+=a[i];
    num=0;
    while(n1)
    {
        a[num]=n1%10;
        n1=n1/10;
        num++;
    }
    for(i=0;i<num;i++)
        q+=a[i];
    printf("%d %d",p,q);
}

发表于 2020-03-27 17:09:58 回复(0)
Java 解法
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        //int 可以表示的最大数 2147483647
        //1600000000 可以表示
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()){
            int i = scanner.nextInt();
            int j =i*i;
            int sum1=0;
            while (i>0){
                sum1+= i%10;
                i=i/10;
            }
            int sum2=0;
            while (j>0){
                sum2+= j%10;
                j=j/10;
            }
            System.out.println(sum1+" "+sum2);
        }
    }
}


发表于 2020-03-06 11:51:02 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        while(sc.hasNextInt()){
            int n=sc.nextInt();
            int n1=add(n);
            int n2=add((int) Math.pow(n,2));
            System.out.println(n1+" "+n2);
        }
        sc.close();
    }
    public static int add(int n){
       String s=String.valueOf(n);//将数字n换成字符串
       int sum=0;
       for(int i=0;i<s.length();i++){
           //对于此字符串来说,要先提取出来它的每一位(这里是char类型需要先转换为String类型)转换成十进制数字,然后将字符串的每一位进行数字相加
           int x=Integer.parseInt(String.valueOf((s.charAt(i))));
           sum+=x;
       }
       return sum;
    }
}

发表于 2020-03-04 16:50:11 回复(0)
#include<iostream>
using namespace std;
int main(){
    int n;
    while(cin>>n){
        int temp=n,sum1=0,sum2=0;
        while(temp>0){
            sum1+=temp%10;
            temp/=10;
        }
        temp=n*n;
        while(temp>0){
            sum2+=temp%10;
            temp/=10;
        }
        cout<<sum1<<" "<<sum2<<endl;
    }
}

发表于 2020-01-13 21:56:36 回复(0)
#include<bits/stdc++.h>
int sum(int n){
    int s=0;
    while(n!=0){
        s=s+n%10;
        n=n/10;
    }
    return s;
}
int main(){
    int n;
    while(scanf("%d",&n)!=EOF)
        printf("%d %d\n",sum(n),sum(n*n));
}
发表于 2019-03-04 14:34:07 回复(1)
//感觉自己弄麻烦了,将输入转化成字符串,然后再用substring切割字符串,
//将单个字符串转化成数字,再进行计算
import java.util.Scanner;
public class Main
{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = a*a;
        System.out.print(add(a));
        System.out.print(" " + add(b));

    }
    public static int add(int a)
    {
        int sum=0;
        int c=0;
        String b="";
        String s = String.valueOf(a);
        for(int i=0; i<=s.length()-1;i++)
        {
            b = s.substring(i,i+1);
            c = Integer.parseInt(b);
            sum = sum + c;
        }
        return sum;
    }
}
//看了前面的回答,修改了一下
import java.util.Scanner;
public class Main
{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = a*a;
        System.out.print(add1(a));
        System.out.print(" " + add1(b));
    }
    public static int add1(int a)
    {
        int sum=0;

        for(;a != 0;)
        {
            sum = sum + a % 10;
            a = a/10;
        }
        return sum;
    }
}

编辑于 2018-05-26 21:18:13 回复(0)
#include<iostream>
using namespace std;
int main(){
    int n;
    cin >> n;
    while (n != 0){
        int result1=0, result2=0;
        int squara = n*n;
        while (n / 10 != 0){
            result1 += n % 10;
            n /= 10;
        }
        result1 += n;

        while (squara / 10 != 0){
            result2 += squara % 10;
            squara /= 10;
        }
        result2 += squara;
        cout << result1 << " " << result2 << endl;
        cin >> n;
    }
}

发表于 2017-10-08 17:24:00 回复(0)

import java.util.Scanner;
public class Main{
public static void main(String[] s){
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
int a=sc.nextInt();
if(a==0){
break;
}
test(a);
}
}
public static void test(int a){
//先考虑输出各位数字之和
int sum1=0,sum2=0;
int temp=a;
while(temp>0){
sum1+=temp%10;
temp/=10;
}
System.out.print(sum1+" ");
//在考虑它的平方的数的各位和
int b=a*a;
while(b>0){
sum2+=b%10;
b/=10;
}
System.out.println(sum2);
}
}

发表于 2017-04-26 10:48:58 回复(0)
#include<stdio.h>
int main (){//the shorter,the better.
    int n,t,r1,r2;
    for(;~scanf("%d",&n)&&(t=n*n);)
        for(r1=0,r2=0;(n>0&&~(r1+=n%10))+(t>0&&~(r2+=t%10));n/=10,t/=10,!n&&!t?printf("%d %d\n",r1,r2):0);
}

编辑于 2018-01-12 13:55:40 回复(1)
#include <iostream>
using namespace std;

int func(int n){
    int sum=0;
    while(n!=0){
        sum += n%10;
        n /= 10;
    }
    return sum;
}

int main(){
    int n;
    while(cin>>n){
        cout<<func(n)<<" "<<func(n*n)<<endl;
    }
}

发表于 2018-03-15 18:14:04 回复(0)
说实话,个人觉得这题目读起来很费劲,“ 对于给定的正整数 n,计算其十进制形式下所有位置数字之和,并计算其平方的各位数字之和。“很容易误导人,大概是这个意思,假如n为97, 其十进制形式下所有位置数字之和等于9+7=16,” 并计算其平方的各位数字之和“这句话并不是计算16的平方16*16=256的各位数字之和2+5+6=13.而是计算原始数字97*97=9409,各位数字之和9+4+0+9=22。
int main()
   {
      int s,n,n1,n2,temp;
      while(cin>>n)
        { 
          int sum1=0,sum2=0;
          if(n==0)
            {             
              break;     //注意这里,当输入为0时,直接退出,免得输出0 0,
                         //因为当输入数字n为时,是不输入任何值的         
             }
          temp=n; 
          n1=temp;
          while(n1)
          {
            s=n1%10;
            sum1+=s;
            n1=n1/10;
          }
          n2=temp;
          n2*=n2;
          while(n2)
          {
            s=n2%10;
            sum2+=s;
            n2=n2/10;
          }
            cout<<sum1<<" "<<sum2<<endl;
        }
    return 0; 
   }

编辑于 2017-04-19 21:13:57 回复(0)
#include<stdio.h>
using namespace std;
int out(long long n){
    int acc=0;
    while(n!=0){
        acc=acc+n%10;
        n=n/10;
    }
    return acc;
}
int main() {
    long long  n;
    while(scanf("%lld",&n)!=EOF){
        long long n2=n*n;
        printf("%d ",out(n));
        printf("%d\n",out(n2));
    }
}

编辑于 2024-03-26 23:51:41 回复(0)
#include <iostream>
using namespace std;

int digitSum(int n) {   //求各位数字之和
    int sum = 0;
    while (n != 0) {
        sum += n % 10;
        n /= 10;
    }
    return sum;
}

int main() {
    int n;
    while (cin >> n) {
        cout << digitSum(n) << " " << digitSum(n * n) << endl;
    }
    return 0;
}

编辑于 2024-03-04 14:00:38 回复(0)
#include <cstdio>

int main(){
    int n;
    while(scanf("%d",&n) != EOF){
        long long int sn = n*n;
        int sum1 = 0,sum2 =0;
        while(n){
            sum1 += n%10; //根本不需要把每一位存入数组中
            n/= 10;
        }
        printf("%d ",sum1);

        while(sn){
            sum2 += sn%10;
            sn /= 10;
        }
        printf("%d\n",sum2);
    }
    return 0;
}

发表于 2023-03-13 19:15:27 回复(0)
可以考虑使用字符串运算,有时间记得写!!!
#include <iostream>
using namespace std;

int main()
{
    int x;
    while(cin>>x)
    {
        int num=0;
        int x2=x*x;
        while(x!=0)
        {
            num+=(x%10);
            x/=10;
        }
        cout<<num<<' ';
        num=0;
        while(x2!=0)
        {
            num+=(x2%10);
            x2/=10;
        }
        cout<<num<<endl;
    }
}


发表于 2022-03-02 23:42:19 回复(0)
# include <iostream>
# include <cmath>

using namespace std;

int main()
{
    int n;
    while(cin>>n)
    {
        int sum=0,a=n*n;
        while(n)
        {
            sum+=n%10;
            n=n/10;
        }
        int answer=0;
        while(a)
        {
            answer+=a%10;
            a=a/10;    
        }
        cout<<sum<<" "<<answer<<endl;
    }
    return 0;
 } 
发表于 2022-02-18 16:09:56 回复(0)