关于二进制转十进制的问题 不知道哪里出了毛病

输入仅由0和1构成的正的二进制数(不超过32位), 以换行符结束。输出该数对应的十进制数。
输入格式:
输入仅由0和1构成的二进制数。

输出格式:输出相应的十进制数。
输入样例:
在这里给出一组输入。例如:101100
输出样例:
在这里给出相应的输出。例如:44

下面是我的代码

#include <iostream>
#include <cstring>
using namespace std;
int main()
{
    char s[100];
    int i, j, term = 1, sum = 0;
    cin.getline(s, 100);
    j = strlen(s);
    for (i = j - 1; i >= 0; i--)
    {
        sum += (s[i] - 48) * term;
        term *= 2;
    }
    cout << sum;
}

可最后提交出现了这个关于这个2的31次方问题 如下图

img

term 和sum 改成 long long类型

long long  term = 1,sum = 0;

int类型取值范围为-2147483648 到 2147483647。
2的31次是2147483648 超出int型取值范围了,

你题目的解答代码如下:

#include <iostream>
#include <cstring>
using namespace std;
int main()
{
    char s[100];
    int i, j;
    long long  term = 1,sum = 0;
    cin.getline(s, 100);
    j = strlen(s);
    for (i = j - 1; i >= 0; i--)
    {
        sum += (s[i] - 48) * term;
        term *= 2;
    }
    cout << sum;
}

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

越界了,把term和sum的类型改成long long

#include <iostream>
#include <cstring>
using namespace std;
int main()
{
    char s[100];
    int i, j;
    long long term = 1, sum = 0;
    cin.getline(s, 100);
    j = strlen(s);
    for (i = j - 1; i >= 0; i--)
    {
        sum += (s[i] - 48) * term;
        term *= 2;
    }
    cout << sum;
}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632