刷题平台的运行结果和自己编译器运行结果不一样,怎么回事?

        这两天做leetcode出现一件怪事:同样的测试数据,我将代码放在编译器里跑结果符合预期,但是!原封不动地复制到leetcode去提交,却输出了一个莫名其妙的结果。

先给出最后的解决方法:

将所有代码放在题目给出的class里提交,即避免出现以下情况:

int sum = 0;
void Cal(vector<int>& sub, int k);
//具体实现不表
void Sub(vector<int>& nums, vector<int>& sub, int start, int k);
//具体实现不表
class Solution {
public:
    int sumOfPowers(vector<int>& nums, int k) {
        //具体实现不表
    }
};

而全部放进class里,就和编译器输出一致啦:

class Solution {
private:
    int sum = 0;
    void Cal(vector<int>& sub, int k);
    //具体实现不表
    void Sub(vector<int>& nums, vector<int>& sub, int start, int k);
    //具体实现不表
public:
    int sumOfPowers(vector<int>& nums, int k) {
        //具体实现不表
    }
};

PS:在求解这问题的过程中,我请教了一位大牛朋友,他当时提出了其他的一些可能性,也一并收录,供大家参考:

“我没有做过leetcode,这种情况我听过,很正常

这往往是你不遵守语言标准导致的

example1.

我说一个常见的例子,int类型的位宽在不用编译器和不同机器上位宽不一样

C99的标准规定int类型的位宽大于等于16

但大多数机器上其实是32或者64,其实和long是一样的

因此使用int的时候不能依赖高于16位的位宽

保证按照标准的最低要求程序可以运行

example2.

再比如C99要求main函数空参数必须是void,返回必须是int,但是其他编译器如msvc会宽恕其他的返回类型和语法

example3.

再比如#programed once语法是msvc自创的,标准上没有,其他编译器也不保证实现

~希望对你有启发~

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值