繁体   English   中英

如何获得大数作为输入?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM