c + + to\_string blev ikke erklæret i denne rækkefølge [[Windows + Devcpp miljø]]

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at implementere Karatsuba multiplikationsalgoritmen i c ++ på Windows 10 ved hjælp af Devcpp ide. Her er koden for det samme:


#include <iostream>
#include <string>
#include <cmath>
using namespace std;

int karatsuba(int x, int y){
    string sx = to\_string(x);
    string sy = to\_string(y);
    int len\_x = strlen(sx);
    int len\_y = strlen(sy);
    if (len\_x == 1 && len\_y == 1)
        return x * y;
    else{
        int n = max(len\_x, len\_y);
        int n\_by\_2 = n / 2;

        int a = x / pow(10, n\_by\_2);
        int b = x \% pow(10, n\_by\_2);
        int c = y / pow(10, n\_by\_2);
        int d = y \% pow(10, n\_by\_2);

        int ac = karatsuba(a, c);
        int bd = karatsuba(b, d);

        int ad\_plus\_bc = karatsuba(a+b, c+d);
        int prod = ac * pow(10, n\_by\_2) + (ad\_plus\_bc * pow(10, n\_by\_2)) + bd;
        return prod;
    }
}

int main(){
    cout<<karatsuba(45, 45);
}


Når jeg kører dette program, får jeg disse fejl:


C: \ Users \ AKuro \ Desktop \ C ++ \ Divide og Conquer \ karatsuba.cpp I funktionen 'int karatsuba (int, int)':
7 25 C: \ Users \ AKuro \ Desktop \ C ++ \ Divide og Conquer \ karatsuba.cpp [[Fejl]] 'to\_string' blev ikke angivet i dette anvendelsesområde


9 23 C: \ Users \ AKuro \ Desktop \ C ++ \ Divide og Conquer \ karatsuba.cpp [[Fejl]] 'strlen' blev ikke angivet i dette anvendelsesområde


18 29 C: \ Users \ AKuro \ Desktop \ C ++ \ Divider og Conquer \ karatsuba.cpp [[Fejl]] ugyldige operander af typer 'int' og '\_\_gnu\_cxx :: \_\_ promote\_2 :: \_\_ type {aka double}' til binær 'operator\%'


20 29 C: \ Users \ AKuro \ Desktop \ C ++ \ Divider og Conquer \ karatsuba.cpp [[Fejl]] ugyldige operander af typer 'int' og '\_\_gnu\_cxx :: \_\_ promote\_2 :: \_\_ type {aka double}' til binær 'operator\%'


Jeg forsøgte de metoder, jeg fandt gennem Googling, men ingen af ​​dem synes at arbejde. Her er hvad jeg allerede har prøvet:


bruger std med to\_string som sådan std :: to\_string


Jeg har endda forsøgt denne tilgang


int i = 1212;
stringstream ss;
ss << i;
string s=ss.str();


men ingen synes at arbejde, og jeg kunne ikke finde noget svar på dette særlige miljø (Windows 10 + Devcpp). Det har virkelig bugget mig. Venligst hvis du kunne hjælpe mig ud.

Bedste reference


Der er flere fejl her:


1) to\_string() er en c + + 11 funktion. Så sørg for at sætte -std=c + + 11 i din makefile eller IDE. [13]


2) strlen() er angivet i cstring, ikke string. Bedre måde her er at bruge noget som int len\_x = sx.size(); og lignende til den anden streng.


3) Returtype af pow() er float eller dobbelt. Så du er nødt til at kaste det utvetydigt som dette: int b = x \% static\_cast<int>(pow(10, n\_by\_2));. Du skal gøre dette for alle udtryk, der bruger pow() og tildele resultatet til int variablen. Faktisk vil det være endnu bedre end støbning at skrive din egen simple intpow() funktion, hvilket ikke er svært at gøre (det er så enkelt at standarden tilsyneladende har hoppet over det :-)). [14]