如何获取13/15/16位long long类型数字的前两位?
获取long long数字的前两位数字
嘿,这个需求其实很好实现,针对你提到的13位、15位或16位的long long类型数字,我给你两种实用的方案:
方案一:数学计算法(高效无额外内存开销)
这种方法通过除法运算直接提取前两位,不需要转换字符串,效率更高。核心思路是根据数字的位数,将其除以对应的10的幂次,得到的结果就是前两位数字。
因为你的数字只有三种长度:
- 13位:除以
10^11(即100000000000) - 15位:除以
10^13(即10000000000000) - 16位:除以
10^14(即100000000000000)
代码示例(C++)
#include <iostream> using namespace std; int getFirstTwoDigits(long long num) { if (num >= 1000000000000LL) { // 匹配13位及以上数字 if (num >= 100000000000000LL) { // 匹配15位及以上数字 if (num >= 1000000000000000LL) { // 匹配16位数字 return num / 100000000000000LL; } else { // 匹配15位数字 return num / 10000000000000LL; } } else { // 匹配13位数字 return num / 100000000000LL; } } // 可根据需求处理不符合长度的情况,比如返回-1或抛出异常 return -1; } int main() { long long num1 = 1234567890123LL; cout << getFirstTwoDigits(num1) << endl; // 输出12 long long num2 = 453456789012345LL; cout << getFirstTwoDigits(num2) << endl; // 输出45 long long num3 = 3534567890123456LL; cout << getFirstTwoDigits(num3) << endl; // 输出35 return 0; }
方案二:字符串转换法(直观易理解)
如果你觉得数学计算的幂次容易记混,也可以把数字转换成字符串,直接截取前两个字符再转回整数,这种方法更直观,代码也更简洁。
代码示例(C++)
#include <iostream> #include <string> using namespace std; int getFirstTwoDigits(long long num) { string numStr = to_string(num); // 先校验数字长度是否符合要求 if (numStr.length() != 13 && numStr.length() != 15 && numStr.length() != 16) { return -1; // 不符合长度时返回标记值 } string firstTwo = numStr.substr(0, 2); return stoi(firstTwo); } int main() { long long num1 = 1234567890123LL; cout << getFirstTwoDigits(num1) << endl; // 输出12 long long num2 = 453456789012345LL; cout << getFirstTwoDigits(num2) << endl; // 输出45 long long num3 = 3534567890123456LL; cout << getFirstTwoDigits(num3) << endl; // 输出35 return 0; }
两种方案都能完美满足你的示例需求,你可以根据自己的代码场景选择:追求性能选数学法,追求可读性选字符串法。
内容的提问来源于stack exchange,提问作者DynamicQ
相关产品推荐
相关产品推荐

