[英]how to get large numbers as input?
嗨,我真的是c ++的新手,我想编写一个从用户那里接收数字并对其数字求和的代码,并一直这样做,直到获得一位数字并返回结果为止。 但是我注意到,当我的数字很大(例如15位数字长)时,错误的数字存储在我声明用于存储用户输入的变量中。 我该怎么办?
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int get_sum(long x) {
cout << x<<endl;
if (x < 10) {
return x;
}
else {
string num_in_str = to_string(x);
long result=0;
for (int i = 0; i < num_in_str.size(); i++) {
int digit = num_in_str[i] - '0';
result += digit;
}
return get_sum(result);
}
}
int main()
{
long input;
cin >> input;
int final_result = get_sum(input);``
cout << final_result;
}
哦,我知道了。 我不得不使用uint64_t数据类型
C ++中的整数数据类型最多可以存储数字。 特别是,根据平台和编译器的不同,“ long”可以是32位或64位,最多可以存储2 ^ 31-1或2 ^ 63-1。 如果要处理任意精度的数字,建议将每个输入读取为字符串,然后逐个字符处理它,如下所示:
#include <cctype>
#include <iostream>
#include <string>
int main()
{
std::string s;
while (std::getline(std::cin, s)) {
// parse string
long sum = 0;
for (std::size_t i = 0; i < s.length(); ++i) {
if (std::isdigit(s[i]))
sum += s[i] - '0';
else
break;
}
std::cout << sum << std::endl;
if (sum < 10) break;
}
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.