培养自己的整数类

Сreating your own class of integers

本文关键字:整数 自己的      更新时间:2023-10-16

我写了一个函数,可以在替换中找到数字并总结它们256。

__int64_t String_solver(string str){
    __int64_t i_a = 0;
    for(int i = 0 ; i < str.size(); i++){
        int j = 0;
        if(isdigit(str[i])){
            j=i;
            while(isdigit(str[i])){
                i++;
            }
            const char * c = str.substr (j,i-j).c_str();
            i_a+= strtoll(c, nullptr,10);
        }
        else if((str[i]=='-')&&(isdigit(str[i+1]))){
            j=i;
            i++;
            while(isdigit(str[i])){
                i++;
            }
            const char * c = str.substr (j,i-j).c_str();
            i_a+= strtoll(c, nullptr,10);
        }
    }
    return i_a;
}
int main() {
    __int64_t arg=0;
    string string1;
    std::ifstream in("text.txt");
    if (in.is_open())
    {
        while (getline(in, string1))
        {
            arg+=String_solver(string1);
        }
    }
    in.close();
    if(arg<0){
        cout << (arg % 256 + 256) % 256;
    }
    else{
        cout << arg%256;}
    return 0;
}

但是该程序与以下文件无法正常工作text.txt

12123
123123
123124234345
23423453465467345234
234234234234234
234234234234
-234234234234
-2134234234234287492847923847

我不明白为什么_int_64_t不是合适的类型。

我不明白为什么_int_64_t不是合适的类型。

如果您查看可以存储在_int64_t中的最大价值是什么: 2^64 = 18446744073709551616必须除以2,以便获得负值18446744073709551616/2 = 9223372036854775808。这意味着您可以获得的最大值是9223372036854775808,最小值为-9223372036854775808,但是您的最低值是-2134234234234287492847923847。这就是为什么_int64_t不合适的原因。

也就是说,由于我们真的不知道您的输出怎么了

如评论和第一个答案所述,您的类型不够长。

您仅对最终模拟256值感兴趣。因此,您可以一一读取数字并递归计算Modulo 256值,例如x = (10*x + newdigit) %256;

只要注意x的第一次感情的标志即可。