1 条题解
-
0
C
说明
本题要求找出不超过N的非负整数中能被K整除的最大数。核心逻辑是:能被K整除的数一定是K的倍数(即m×K,m为非负整数),因此最大的符合条件的数是“不超过N的最大K的倍数”。
计算方法为:先用N除以K取整数商(向下取整,C语言整数除法默认此行为),再将商乘以K,结果即为所求。例如N=3、K=2时,3÷2=1(商),1×2=2,符合条件。
由于N和K最大可达2×10⁹,需用long long类型存储以避免溢出,时间复杂度为O(1)。代码
#include <stdio.h> int main() { long long N, K; // 读取N和K(用%lld处理long long类型) scanf("%lld %lld", &N, &K); // 计算最大的K的倍数:(N/K)取整数商,再乘以K long long lucky = (N / K) * K; // 输出结果 printf("%lld\n", lucky); return 0; }C语言拓展知识
推荐搜索:C语言中long long类型的范围(可表示至约9×10¹⁸)、整数除法的向下取整特性(对正整数的影响)、大数运算中的类型选择原则(避免溢出)。
C++
说明
本题逻辑与C语言一致(找不超过N的最大K的倍数),C++通过
long long类型处理大数,利用整数除法的向下取整特性计算商,再乘以K得到结果。代码中使用输入输出流,无需格式控制符,更简洁。新知识
- 大数类型处理:
- 术语:
long long - 解释:64位整数类型,可表示范围约-9×10¹⁸到9×10¹⁸,足以容纳题目中2×10⁹的输入及运算结果,避免溢出(如2×10⁹×2×10⁹=4×10¹⁸仍在范围内)。
- 对比:C和C++均支持
long long,但C++的输入输出(cin/cout)无需显式格式控制符(如%lld),更方便。
- 术语:
AC
#include <bits/stdc++.h> using namespace std; int main() { long long N, K; // 读取N和K(long long类型直接用cin读取) cin >> N >> K; // 计算最大的K的倍数 long long lucky = (N / K) * K; // 输出结果 cout << lucky << endl; return 0; }C++拓展知识
推荐搜索:C++中
long long与int的性能对比、整数除法在不同数据类型中的行为一致性、大数运算中的溢出检测方法。 - 大数类型处理:
- 1
信息
- ID
- 336
- 时间
- 1000ms
- 内存
- 64MiB
- 难度
- 6
- 标签
- 递交数
- 28
- 已通过
- 10
- 上传者