请问这2段代码有何不同 ?


#include<cstdio>
long long M,N,x,y;
long long min(int a, int b) {
    return a<b?a:b;
}
int main() {
    scanf("%lld%lld",&M,&N);
    x=((M+1)*M/2)*((N+1)*N/2);
    for(long long i=1; i<= min(M,N); i++) {
        y+=(M-i+1)*(N-i+1);
    }
    printf("%lld %lld", y, x-y);
    return 0;
}

``

```c++

#include <iostream>
#include <cmath>
using namespace std ;
int main ()
{
    long long sum ;
    long long sqr = 0 ;
    long long lon ;
    int a , b ;
    cin >> a >> b ;
    sum = a * (a + 1)/2 *b * (b + 1) /2 ;
    for (int i = 0 ;i <min (a,b);i++)
    {
        sqr += (a - i) *(b - i) ;
    }
    lon = sum - sqr ;
    cout << sqr <<" " <<lon ;
    return 0 ;
}

上面的是C语言
下面的是C++

一是两者语言不同
二是第一段代码有问题,因为y没有初始化为0,循环中直接用+=是有风险的。看编译器有没有给y默认为0,如果不自动给默认值,那就是个垃圾值,程序结果就无法预测了。而第二段是有初始值的