1

I have declared a function (C++)

int products(char num1, char num2, char num3, char num4, char num5);

but my compiler is giving me this error:

Invalid conversion from 'char' to 'const Char*'
error initializing argument 1 of 'int atoi (const char*)'  on line 22

when I attempt to pass num1, num2 etc. as a parameter to atoi.

#include<iostream>
#include<string>

using namespace std;

int Product(char num1, char num2, char num3, char num4, char num5);

const string LargeNum = "7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450";

int main(){
int greatestVal = 0;
for(int i = 0; i + 4 <= LargeNum.length(); i++ ){
    if(greatestVal < Product(LargeNum[i], LargeNum[i+1], LargeNum[i+2], LargeNum[i+3], LargeNum[i+4])){
        greatestVal = Product(LargeNum[i], LargeNum[i+1], LargeNum[i+2], LargeNum[i+3], LargeNum[i+4]);
    }
}
cout << greatestVal << endl;
system("PAUSE");
}

int Product(char num1, char num2, char num3, char num4, char num5){
    return (atoi(num1)*atoi(num2)*atoi(num3)*atoi(num4)*atoi(num5));
}
4

6 回答 6

7

atoi takes a const char* (i.e. a null terminated sequence of characters). You are supplying it with a single char, so the compiler complains. How you fix it depends on exactly what you are trying to do.

I would guess that you want to convert a char representing a digit to an integer, '0' to 0, '1' to 1 etc. If so then the correct code would be

return (num1 - '0')*(num2 - '0')*(num3 - '0')*(num4 - '0')*(num5 - '0');

This works because chars convert to ints automatically when you do arithmetic on them, and also because the chars '0' to '9' are guaranteed to be in sequence, so all you need to do to convert a digit to an int is subtract '0' from it.

于 2012-11-23T19:05:00.793 回答
3

Please see the documentation of atoi first. It takes const char* as argument, while you're passing char to it. That is definitely an error.

Also, you don't need atoi. If you want to convert into '7' into 7, then just substract '0' from it. So what you probably want is this:

int Product(char num1, char num2, char num3, char num4, char num5)
{
    return (num1-'0')*(num2-'0')*(num3-'0')*(num4-'0')*(num5-'0');
}
于 2012-11-23T19:04:27.860 回答
2

Function atoi expects parameter of type const char* (string), you're passing single character to it.

If you want to retrieve integer value from a character containing single digit, you can use '0' character.

于 2012-11-23T19:04:14.740 回答
1

atoi expects a const char* as parameter, and you're giving it a char. The error message is pretty clear.

To convert a char to an int, you can do num1 - '0':

int Product(char num1, char num2, char num3, char num4, char num5){
   return (num1-'0')*(num2-'0')*(num3-'0')*(num4-'0')*(num5-'0');
}
于 2012-11-23T19:04:05.520 回答
0

The reason why you are getting a compilation error is because there is no matching overload for the set of arguments you are passing to the method. The compiler tries to find the closest match, which in your case char and const char*, and then reports that error.

Note that atoi doesn't work because atoi takes in a string and not a single char -- for the very good reason that most numbers have more than one digit!

You can do this:

int Product(char num1, char num2, char num3, char num4, char num5){
    return (num1 - '0')*(num2 - '0')*(num3 - '0')*(num4 - '0')*(num5 - '0');
}

instead.

于 2012-11-23T19:04:31.403 回答
0

As many people are saying you can just use char - '0' to convert a char to an integer. This is because in ASCII 0-9 are represented by the numbers 48-57 so if you take away '0' which is equivalent to 48 it will leave you with the result between 0-9 as long as you pass in a number 0 to 9.

Just be careful you don't loop past the end of LargeNum as you are currently looping to the end of the string and accessing 3 past it. You may want to loop to LargeNum.length - 3;

于 2012-11-23T19:32:31.833 回答