题解
累加符合要求的数字
1 条题解
-
0
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