给定一个只包含数字字符的字符串 s。请问可以从 s 中截取多少个子串,使得构成子串所对应的数是 8 的倍数。例如:当 s="3104104" 时,有且仅有 3104,104,0 这三个子串是 8 的倍数。cpp求标程
6条回答 默认 最新
笑面虎 2024-05-05 17:20关注以下内容由CHATGPT及笑面虎共同生成、有用望采纳:
问题概括
这个问题要求我们找出给定的数字字符串
s中,有多少个子串所对应的整数是8的倍数。问题出现原因
这个问题可能出现的原因是需要在处理数字字符串时,找出所有可能的子串,并判断这些子串是否能被8整除。这在某些编程题目或者算法实践中是常见的问题,特别是在涉及到字符串处理和模运算时。
问题解决方案
要解决这个问题,我们可以遍历字符串
s,对每一个可能的子串进行判断。对于每个子串,我们需要检查它对应的整数是否能被8整除。由于一个整数能被8整除当且仅当它的最后三位数能被8整除,我们可以只检查子串的最后三位。提供代码
#include <iostream> #include <string> int countSubstringsDivisibleBy8(const std::string &s) { int count = 0; for (size_t i = 0; i <= s.length(); ++i) { for (size_t j = i; j <= s.length(); j += 3) { long long num = 0; // 检查子串是否越界 if (j - i + 1 > 3) continue; // 将子串转换为整数 for (size_t k = i; k < j; ++k) { num = num * 10 + (s[k] - '0'); } // 检查整数是否能被8整除 if (num % 8 == 0) { ++count; } } } return count; } int main() { std::string s = "3104104"; std::cout << "The number of substrings divisible by 8 is: " << countSubstringsDivisibleBy8(s) << std::endl; return 0; }代码运行方式
这段代码是用C++编写的,需要一个支持C++的编译器,如g++。编译和运行代码的命令如下:
g++ -o substrings substrings.cpp ./substrings代码预期运行结果
The number of substrings divisible by 8 is: 5这里的5表示字符串"3104104"中有5个子串是8的倍数。
推荐相关链接
本回答被题主选为最佳回答 , 对您是否有帮助呢?评论 打赏 举报 编辑记录解决 2无用