[略略略] 2023-03-22 12:15 采纳率: 47.8%
浏览 23
已结题

为什么将int改成long long反而溢出呢

请问这道题目为什么使用int可以通过,改成long long反而不行
这是题目链接:https://www.nowcoder.com/practice/5928127cc6604129923346e955e75984?tpId=40&tqId=21376&rp=1&ru=/ta/kaoyan&qru=/ta/kaoyan&difficulty=&judgeStatus=3&tags=/question-ranking

#include<string>
#include<vector>
#include<iostream>
#include<cstdio>
#include<utility>
#include<cmath>
#include<algorithm>

using namespace std;

int main(){
    string s;
    while(getline(cin,s)){
        int sum=0;
        for(int i=0;i<s.size();i++){
            sum+=(s[i]-'0')*((2<<(s.size()-1-i))-1);
            //最低位为第0位,第k位数为x,则该位计算为x*(2^(k+1)-1)
            //最终的结果是要把读入的数的全部位进行上述计算后相加
        }
        cout<<sum<<endl;
    }    
    return 0;
}

这是我写的代码,溢出的输入是1000000000000000000000000000000,正确输出是:2147483647,但把sum改成long long后输出为:-2147483649
为什么ong long型反而溢出呢,这是为什么?麻烦了解的lao解答一下,谢谢!

  • 写回答

2条回答 默认 最新

  • 快乐鹦鹉 2023-03-22 12:30
    关注

    改成long long只是sum而已,问题是2<<(s.size()-1-i) 这个值本身就会溢出了啊。改一下:

    long long sum = 0;
    for(int i=0;i<s.size();i++){
                long long n = 2;
                n = n<<s.size()-1-i;
                sum+=(s[i]-'0')*(n-1);
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月30日
  • 已采纳回答 3月22日
  • 创建了问题 3月22日

悬赏问题

  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 AT89C51控制8位八段数码管显示时钟。
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题