首页 > 试题广场 >

数位之和

[编程题]数位之和
  • 热度指数:25822 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}给定一个整数 n\left(-10^{9} \leqq n \leqq 10^9\right),请计算其所有数位之和。若 n 为负数,请先取其绝对值。

输入描述:
\hspace{15pt}在一行中输入一个整数 n,满足 -10^{9} \leqq n \leqq 10^9


输出描述:
\hspace{15pt}输出一个整数,表示 n 的所有数位之和。
示例1

输入

12

输出

3

说明

将正整数 12 的各位相加,1+2=3
示例2

输入

-305

输出

8

说明

取绝对值后 305 的各位相加,3+0+5=8
#include <stdio.h>
int main() {
    int n;
    scanf("%d",&n);
    int t;
    int cnt=0;
    if (n>0){
        t=n;
        while(t>9){
            t=t/10;
            cnt++;
        }
        int i;
        int a=1;
        for(i=0;i<cnt;i++){
            a=a*10;
        }
        int sum=0;
        do{
            int b=n/a;
            n=n%a;
            a=a/10;
            sum=sum+b;
        }while(a>0);
        printf("%d",sum);
    }
    else if(n<0){
        n=-n;
		t=n;
        while(t>9){
            t=t/10;
            cnt++;
        }
        int i;
        int a=1;
        for(i=0;i<cnt;i++){
            a=a*10;
        }
        int sum=0;
        do{
            int b=n/a;
            n=n%a;
            a=a/10;
            sum=sum+b;
        }while(a>0);
        printf("%d",sum);
    }
	else if(n==0){
		printf("0");
	} 
    return 0;
}

发表于 2025-11-15 13:30:32 回复(0)
#include <stdio.h>
#include <stdlib.h>
int main(){
    int n,s=0;
    scanf("%d\n",&n);
    n = abs(n);
    while(n>0){
        s += n%10;
        n = n/10;
    }
    printf("%d\n",s);
    return 0;
}
发表于 2025-09-30 20:49:39 回复(0)
也许看我的代码,你能学到新东西哦。
#include <stdio.h>
#include <stdint.h>

void abs_int(int* const n, const int size)
{
    uint8_t* addr = (uint8_t*)n;
    addr[size - 1] &= 0X7F;
}

int main() {
    
    int n = 0, result = 0;

    scanf("%d", &n);

    if (n < 0)
    {
        abs_int(&n, sizeof(n));
    }

    while (n)
    {
        result += n % 10;
        n /= 10;
    }

    printf("%d", result);

    return 0;
}


发表于 2025-08-08 20:26:13 回复(0)
#include <stdio.h>

int main() {
    int n,i;
    int sum=0;
    scanf("%d",&n);
    if(n<0)
    n=-n;
    for(i=1;i<=10;i++)//给的实例有问题,int16位-2,147,483,648 ~ 2,147,483,647,已经超过了10^9
    {
    sum+=n%10;
    n/=10;
    }
    printf("%d",sum);
    return 0;
}
发表于 2025-07-28 19:28:02 回复(0)
递归做法
#include <stdio.h>

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

}
int main() {
    long n = 0;
    scanf("%ld",&n);

    if(n<0)
        n = -1*n;
    
    int ret = func(n);
    printf("%d",ret);
    return 0;
}


发表于 2025-06-15 17:45:50 回复(0)

//简洁代码(我是新手,勿喷)
#include <stdio.h>

int main()
{
    int n = 0;
    scanf("%d", &n);
    int sum = 0;
    if (n >= 0)
    {
        while (n >= 10)
        {
            sum += (n % 10);
            n /= 10;
        }
        sum += n;
    }
    else
    {
        n = n * (-1);
        while (n >= 10)
        {
            sum += n % 10;
            n /= 10;
        }
        sum += n;
    }
    printf("%d", sum);
    return 0;
}

// 详细解释
#include <stdio.h>

int main()
{
    int n = 0;
    scanf("%d", &n);
    int sum = 0;
    if (n >= 0) // 判定,整数 n 是一个正数
    {
        while (n >= 10)
        {
            sum += (n % 10); // 先无限 % 10,得出所有位的个位数
            n /= 10; // n / 10 是方便停止循环,直到最后 n < 10 的时候停止,这时候 n 是个位数
        }
        sum += n; // 上面 % 10 得出 2 位数 以上的所有个位数,最后加上 n / 10 所得的个位数
    }
    else
    {
        n = n * (-1); // 判定 如果输入整数 n 为负数,先 * (-1), 负负得正
        while (n >= 10)
        {
            sum += n % 10;
            n /= 10;
        }
        sum += n;
    }
    printf("%d", sum);
    return 0;
}
发表于 2025-06-15 17:14:17 回复(0)
#include<stdio.h>

int main()
{
    int a=0;
    int b=0;
    scanf("%d",&a);
    while(a>0)
    {
        b=b+a%10;
        a/=10;
    }
    printf("%d",b);

    return 0;
}
发表于 2025-02-21 20:13:56 回复(0)
#include <stdio.h>
void func(int n)
{
   static int sum=0;
    if(n>=10)
    {
        sum+=n%10;
        func(n/10);
    }
    else {
     printf("%d",sum+n);
    }
   
}
int main() {
    int n;
    scanf("%d",&n);
  func(n);
}
发表于 2024-11-05 20:32:49 回复(0)
#include<stdio.h>

int main()
{
    int n,sum=0;
    scanf("%d",&n);
    int a=n;
    while(a){
        sum+=(a%10);
        a/=10;
    }
    printf("%d",sum);
    return 0;
}
发表于 2024-09-15 20:54:27 回复(0)
#include<stdio.h>
int qiuhe(int x)
{
if(x==0)
return 0;

if(x>9)
return x%10+qiuhe(x/10);
else
return x%10;


}

int main()
{
int a=0;
scanf("%d",&a);
printf("%d",qiuhe(a));

return 0;
}
发表于 2024-08-10 16:29:13 回复(0)
#include <stdio.h>

int main() {
    int a = 0, b = 0;
    scanf("%d", &a);
    do {
        b = b + a % 10;
        a /= 10;

    } while (a > 0);
        printf("%d", b);

    return 0;
}
发表于 2024-05-31 17:52:59 回复(0)
#include <stdio.h>

int main()
{
	int i = 0;
	scanf("%d", &i);
	int ret = 0;
	while (i)
	{
		ret += i % 10;
		i /= 10;
	}
	printf("%d\n", ret);
	return 0;
}

发表于 2024-05-11 18:48:43 回复(0)
#include <stdio.h>

int main()
{
    int a=0, ret=0, sum=0;
    scanf("%d", &a);

    do
    {
        ret=a%10;
        sum+=ret;  
    }while( (a=a/10) != 0);

    printf("%d", sum);
    return 0;
}
发表于 2024-04-30 21:52:49 回复(0)
#include <stdio.h>

int main() 
{
    int n = 0;
    int sum = 0;

    scanf("%d", &n);

    while(n)
    {
        sum += n % 10;
        n /= 10;
    }

    printf("%d\n", sum);

    return 0;
}

发表于 2024-04-05 21:49:50 回复(0)
#include <stdio.h>

int main() {
    char a[15], n=0;
    int sum=0;
    for(int i=0; i<=14; i++){
        if(scanf("%c", &a[i]) == EOF){
            break;
        }
        n=i;
    }
    n--;//多读了一个换行符
    for(int i=0; i<=n; i++){
        sum += (a[i]-48);
        //printf("%d ", a[i]-48);
    }
    printf("%d", sum);
    return 0;
}
编辑于 2024-01-20 10:41:47 回复(0)
#include <stdio.h>

int main() {
    int n,sum=0;
    scanf("%d",&n);
    while(n)
    {
        sum=sum+(n%10);
        n=n/10;
    }
    printf("%d",sum);
    return 0;
}

编辑于 2024-01-13 10:33:12 回复(0)
#include <stdio.h>

int main() {
    int a,b=0;//a用来存输入的整数
    scanf("%d",&a);
    while(0!=a){
            b+=a%10;
            a=a/10;
        }
    printf("%d",b);  
    return 0;
}
编辑于 2024-01-12 16:00:34 回复(0)
#include <stdio.h>

int main()
{
    int n=0;
    //输出
    scanf("%d",&n);
    //计算
    int sum=0;
    int tmp=n;
    while(tmp)
    {
        sum+=tmp%10;
        tmp/=10;
    }
    //输出
    printf("%d\n",sum);

    return 0;
}

发表于 2023-12-06 11:33:58 回复(0)
#include <stdio.h>

int main()
{
    int n=0,m=0,num=0;
    scanf("%d",&n);
    while(n!=0)
    {
        m=n%10;
        n=n/10;
        num=num+m;
    }
    printf("%d",num);

    return 0;
}
发表于 2023-10-29 17:46:12 回复(0)
#include <stdio.h>

int main()
{
    int a;
    int n=0;
    while(scanf("%1d",&a)!=EOF)
    {
        n+=a;
    }
    printf("%d",n);
    return 0;
}

发表于 2023-10-13 13:20:10 回复(0)

问题信息

上传者:牛客301599号
难度:
41条回答 3141浏览

热门推荐

通过挑战的用户

查看代码
数位之和