top1编程
← 返回题目
题解

累加符合要求的数字

1 条题解

  • 0
    @ 2026-8-5 21:17:14

    P4414 累加符合要求的数字(入门)

    解题思路

    题目先读入一个基准数k,后面跟一串正整数,以0结尾,要把所有是k的倍数的数累加起来。判断一个数x是不是k的倍数,就看 x%k 是否等于0:如果等于0,说明x能被k整除,就是k的倍数。读入可以用 while(cin>>x && x!=0),意思是:只要还能读进来数字、而且读到的不是0,就一直读。这样就不用事先知道一共有几个数,读到0就自动停。0在这里是"结束信号",它本身不是要处理的数字。边界情况:如果第一个数就是0,循环一次也不执行,累加和是0;如果k=1,那所有数都是1的倍数,全部累加。如果某个数x比k还小,x%k 的余数就是x本身,不等于0,不会被误加。

    参考代码

    // 程序用途:读入一串正整数(以0结尾),累加其中是k或k的倍数的数字
    #include <iostream>
    using namespace std;
    
    int main() {
        int k;
        cin >> k;                       // 基准数k
        int x, s = 0;                   // x为当前读入数字,s为累加和
        while (cin >> x && x != 0) {    // 一直读到0为止
            if (x % k == 0) s += x;     // 是k的倍数就累加
        }
        cout << s << endl;
        return 0;
    }
    

    复杂度分析

    读进来的数一共有n个,每个数只判断一次,所以时间复杂度 O(n);只用x、s两个变量,额外空间复杂度 O(1)。

    • 1