PTA 统计各位数字之和是5的数

本文介绍了一个使用C语言实现的程序,该程序能够判断指定范围内数字的各位数之和是否等于5,并统计和计算满足条件的数字总数及它们的和。通过定义函数is()检查数字特性,以及count_sum()函数进行范围内的计数和累加。
#include <stdio.h>

int is( int number );
void count_sum( int a, int b );

int main()
{
    int a, b;

    scanf("%d %d", &a, &b);
    if (is(a)) printf("%d is counted.\n", a);
    if (is(b)) printf("%d is counted.\n", b);
    count_sum(a, b);
    return 0;
}
//1234%10 = 4,123%10 = 3,12%10 = 2
// %10 可以取到数字最后一位
// /10 可以取到数字的前几位
int is(int number){
    int sum = 0,t = 0;
    while (number != 0)
    {
        t = number%10;
        sum += t;
        number /= 10;
    }
    if(sum == 5){
        return 1;
    }
    return 0;
}

void count_sum( int a, int b ){
    int count=0,sum=0;
    for(int i=a;i <= b;i++){
        if(is(i) != 0){
            count += 1;
            sum += i;
        }
    }
    printf("count = %d, sum = %d",count,sum);
}

PTA平台上,输出整个位数字有不同的需求场景,下面分别介绍不同场景下的实现方法: ### 求整的位各位数字之和并输出 此场景不仅需要输出个位数字,还需统计的位以及各位数字之和。代码如下: ```c #include <stdio.h> int main() { int N; scanf("%d", &N); int i = 0; int sum = 0; while (N != 0) { int y; y = N % 10; N = N / 10; sum = sum + y; i++; } printf("%d %d", i, sum); return 0; } ``` 该代码中,`y = N % 10` 语句用于获取整 `N` 的个位数字,通过循环不断取出各位数字并累加求和,同时统计数字的位,最后输出位各位数字之和 [^1]。 ### 逆序输出一个整各位数字 若要从低位开始逐位分割并输出整各位数字,可使用以下代码: ```c #include <stdio.h> int x; int i; int main() { scanf("%d", &x); do { i = x % 10; printf("%d ", i); x = x / 10; } while(x != 0); return 0; } ``` 此代码使用 `do-while` 循环,每次通过 `i = x % 10` 获取当前整 `x` 的个位数字并输出,然后将 `x` 除以 10 去掉已输出的个位数字,直到 `x` 变为 0 [^2]。 ### 从高位开始输出整各位数字 当需要从高位开始输出整各位数字时,可借助组来实现。思路是先将整各位数字按顺序存入组,再从组的最后一个元素开始往前输出。代码示例如下: ```c #include <stdio.h> #define MAX_SIZE 20 int main() { long int num; int digits[MAX_SIZE]; int index = 0; scanf("%ld", &num); // 将各位数字存入组 do { digits[index++] = num % 10; num = num / 10; } while (num != 0); // 从组最后一个元素开始往前输出 for (int i = index - 1; i >= 0; i--) { printf("%d ", digits[i]); } return 0; } ``` 该代码先将整各位数字通过 `num % 10` 依次存入组 `digits` 中,再通过循环从组的最后一个元素开始往前输出,从而实现从高位开始输出各位数字的目的 [^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值