转换基数 11 到十进制

Conversion base 11 to decimal

本文关键字:十进制 转换      更新时间:2023-10-16

我知道unsigned long最多只能4294967295,所以这是我的问题,当用户输入许多数字(例如结果将超过限制)时,转换后的数字将只是4294967295。例:

Base 11: 1928374192847
Decimal: 4294967295

结果应该是5777758712535.如何修复这个限制? VB6.0 需要我们。这是我的代码:

    cout << "tt  CONVERSIONn";
    cout << "t     Base 11 to Decimaln";
    cout << "nBase 11: ";
    cin >> str;
    const auto x = str.find_first_not_of("0123456789aA");
    if (x != string::npos)
    {
        std::cout << "Invalid Inputnn";
        goto a;
    }
    unsigned long x = strtoul(str.c_str(), NULL, 11);
    cout << "Decimal: " << x << "nn";

如果结果超过 4294967295,程序应显示"超出范围"。对不起,我只是一个初学者。

来自 www.cplusplus.com 上的 strtoul 文档:

如果读取的值超出了无符号长整型的可表示值范围,则该函数返回 ULONG_MAX(在 中定义),并且 errno 设置为 ERANGE。

您应该检查 errno 以确定该值是否超出范围。