Компилятор кодовых блоков дает неправильный вывод по сравнению с онлайн-компилятором

Моя операционная система: Windows 64 бит

Под кодовыми блоками: Когда я перехожу в Настройки - ›Компилятор -› Выбранный компилятор - GNU GCC Compiler

Но на вкладке исполняемые файлы toolchain

Я вижу следующую информацию:

Каталог установки компилятора: C: \ Program Files (x86) \ CodeBlocks \ MinGW

Компилятор C: mingw32-gcc.exe

Компилятор C ++: mingw32-g ++. Exe

Я пытаюсь запустить следующую программу на C ++:

#include<iostream>
#include<math.h>
using namespace std;
int find_size(int a,int b)
{
    int lena=0;
    int lenb=0;
    while(a>1)
    {
        lena++;
        a/=10;
    }
     while(b>1)
    {
        lenb++;
        b/=10;
    }
    if(lena%2!=0)
        lena+=1;
    if(lenb%2!=0)
        lenb+=1;
    return (lena>lenb?lena:lenb);
}
int karatsuba (int x , int y)
{
    if(x<=10 && y<=10)
        return x*y;
    int n=find_size(x,y);
    int p1 = pow(10,n/2);
    int p2 = pow (10,n);
    int a = x/p1;
    int b = x%p1;
    int c = y/p1;
    int d = y%p1;
    int pdt = p2*karatsuba(a,c)+p1*(karatsuba(a,d)+karatsuba(b,c))+karatsuba(b,d);
    return pdt;
}
int main()
{
    int x,y;
    cout<<"Enter the numbers"<<endl;
    cin>>x>>y;
    int ans=karatsuba(x,y);
    cout<<"\n Product : "<<ans<<endl;
    return 0;
}

Тот же код при запуске в онлайн-компиляторе дает мне правильный результат. Но кодовые блоки дают мне другой результат. В чем может быть проблема с моим компилятором? Та же проблема с моим локальным кодом Visual Studio. Это дает такой же неправильный результат.

Пример: входы, x = 2023, y = 3003

Правильный ответ (и вывод онлайн-компилятора): 6075069

Но вывод My codeblocks и VSC: 6132081

Я понятия не имею, что не так с моими кодовыми блоками, VSC или моим компилятором. Я много лет использую одни и те же кодовые блоки и никогда не сталкивался с такой проблемой.

Одна информация, которую я могу предоставить, заключается в том, что несколько недель назад я установил MinGW, могло ли это вызвать проблемы с настройками моего компилятора?

Может ли кто-нибудь помочь мне решить эту проблему?


person AnonymousMe    schedule 25.09.2020    source источник
comment
Вычисление с плавающей запятой может вызвать некоторые ошибки. Что делать, если вы используете int p1 = pow(10,n/2) + 0.5; int p2 = pow (10,n) + 0.5; вместо int p1 = pow(10,n/2); int p2 = pow (10,n);?   -  person MikeCAT    schedule 25.09.2020
comment
Два разных компилятора дают неожиданный результат, и вы все еще думаете, что проблема в компиляторах? Могу я предположить, что, возможно, это ваш код.   -  person john    schedule 25.09.2020
comment
Удаляйте код, пока не найдете причину несоответствия. Для представленного кода я получаю только 6075069. Что, если вы удалите cin>>x>>y; и жестко закодируете значения в коде (это упростит тестирование!)?   -  person KamilCuk    schedule 25.09.2020
comment
@john, если проблема в моем коде, как он работает в онлайн-компиляторе?   -  person AnonymousMe    schedule 25.09.2020
comment
@KamilCuk Я пробовал жестко кодировать значения. К сожалению, я все еще получаю неверный результат.   -  person AnonymousMe    schedule 25.09.2020
comment
@MikeCAT, отличный ответ! Я внес изменения, и, похоже, это сработало. Но знаете ли вы, почему это хорошо работает в одном компиляторе (онлайн), а не в кодовых блоках? В чем может быть проблема в моей системе, которую я должен решить?   -  person AnonymousMe    schedule 25.09.2020