谁能解释一下这段代码是如何工作的(for循环内部的部分)?谢谢。
问题是:给定一个字符串形式的n位大数,检查它是否能被7整除。如果能被 7 整除则打印 1,否则打印 0。
示例 1:
输入:num = "8955795758" 输出:1 说明:8955795758 可以被 7 整除。
代码:
#include <bits/stdc++.h>
using namespace std;
class Solution{
public:
int isdivisible7(string num){
int carry = 0;
for(auto x: num)
{
int digit = x - '0';
carry = carry * 10 + digit;
carry = carry % 7;
}
return carry == 0 ? 1 : 0;
}
};
int main(){
int t;
cin >> t;
while(t--){
string s;
cin >> s;
Solution ob;
cout << ob.isdivisible7(s) << endl;
}
return 0;
}
答案 0 :(得分:1)
int digit = x - '0';
这一行将数字符号转换为 int 类型的数字。换句话说,我们不会尝试将完整的字符串一次转换为 int,而是取一位数字将其从符号类型转换为 int 类型。例如,如果字符串在第二次迭代时为 '57892',则 x
将等于“7”,而 digit
将等于 7
carry = carry * 10 + digit;
该行将数字添加到从前面的数字中找到的数字部分
carry = carry % 7;
该行为已经获得的部分找到除法的剩余部分。
您收到数字 57325。它首先需要 5,并且在循环的第一次迭代中 carry
将等于 5。在下一次迭代中,它会将 carry
更改为 57求余数后等于1。这意味着57325和1325可以被7整除,或者都不能被7整除,所以我们可以继续进行较小的。在下一次迭代中,第二行后的进位将等于 13,取余数后将等于 6。所以和之前一样,这意味着 1325 和 625 或两者都可以被 7 整除,或者两者都不能,所以我们可以继续使用较小的。继续处理函数查找数字是否可整除。
取余数很重要,因为字符串可能非常大,而没有取余数的 int 将没有足够的空间来保存它。