字符串到 int cpp

时间:2021-07-06 06:16:27

标签: c++ string

谁能解释一下这段代码是如何工作的(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;
}

1 个答案:

答案 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 将没有足够的空间来保存它。