题解
【入门】数据分析
1 条题解
-
0
解题思路
给一个整数 n,要传出两个数字信息:第一个是 n 一共有多少位,第二个是把 n 中每一位数字里是偶数的那些位加起来。
思路:把 n 一位一位拆出来处理。
- 循环取出 n 的最低位(用 n 除以 10 取余数)
- 每取出一位,位数加 1
- 判断这一位是不是偶数:是偶数就加到总和上
- 把 n 除以 10,去掉这一位,继续处理下一位,直到 n 变成 0
- 输出位数和偶数位之和
举例:n = 12345678
- 一共 8 位,所以第一个信息是 8
- 偶数位是 2、4、6、8,加起来等于 20,所以第二个信息是 20
参考代码
#include <iostream> using namespace std; int main() { long long n; // 接收到的整数 cin >> n; int cnt = 0; // 记录位数(第一个数字信息) int sum = 0; // 记录偶数位数字之和(第二个数字信息) // 从最低位开始,一位一位处理 while (n > 0) { int d = n % 10; // 取出当前最低位 cnt++; // 每有一位,长度加 1 if (d % 2 == 0) { sum += d; // 这一位是偶数,就加到总和上 } n /= 10; // 去掉最低位,继续看下一位 } cout << cnt << " " << sum; // 输出两个数字信息 return 0; }复杂度分析
- 时间复杂度:O(位数),n 最多 9 位,循环次数很少
- 空间复杂度:O(1),只用了几个变量
- 1