我编写了一个函数,该函数在替换中查找数字并将它们以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不是合适的类型。
答案 0 :(得分:2)
我不明白为什么_int_64_t不是合适的类型。
如果您查看最大的价值,可以将其存储在_int64_t中:
2^64 = 18446744073709551616
,您必须将其除以2,以便获得负值18446744073709551616/2 = 9223372036854775808
。这意味着您可以获得的最大值为9223372036854775808
,最小值为-9223372036854775808
,但是最小值为-2134234234234287492847923847
。这就是_int64_t不适合的原因。
也就是说,由于我们真的不知道您的输出出了什么问题,因此很难说这是否是真正的问题。
答案 1 :(得分:0)
如评论和第一个答案所述,您的输入类型不足以容纳大量的输入内容。
您只对最终的256模值感兴趣。因此,您可以一一读取数字并递归计算256模值,例如x = (10*x + newdigit) %256;
只需注意处理x
的初恋标志即可。