我已经尝试了2天才能使这段代码正常工作。这只是错误后的错误。
有谁可以指出我做错了什么?
#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;
int main()
{
int h = 0;
for(int a = 100; a<1000; a++)
for(int b = 100; b<1000; b++)
int c = a * b;
// Error: "c" is undefined
if ((c == reverse(c)) && (c > h))
h = c;
cout << "The answer is: " << h << endl;
}
int reverse (int x)
{
// Error: "'itoa' : function does not take 1 arguments"
string s = string(itoa(x));
reverse(s.begin(), s.end());
return (x);
}
使用std :: to_string也会给我带来更多错误。
答案 0 :(得分:1)
当您的编译器在错误消息中向您解释某些内容时,您应该相信它。事实上,itoa
确实会有多个参数,您可以在以下链接中看到:
http://www.cplusplus.com/reference/clibrary/cstdlib/itoa/
编辑:哦,这是可以使用标准的,C ++风格的代码实现的(根据评论中的建议修改了一些代码):
int reverse(int x)
{
std::stringstream ss;
ss << x;
std::string s = ss.str();
std::reverse(s.begin(), s.end());
ss.clear();
ss.str(s.c_str());
ss >> x;
return x;
}
下面。不确定它是最干净的解决方案,但它适用于我的编译器。
编辑:在此处了解如何仅使用一个字符串流:How to clear stringstream?
答案 1 :(得分:1)
我可以提出不同的解决方案吗?您可以通过这种方式测试数字是否为回文,而不是进行int&lt; - &gt;字符串转换:
bool is_palindrome(int number, int base = 10)
{
int rebmun = 0;
for (int temp = number; temp != 0; temp /= base) {
rebmun = (rebmun * base) + (temp % base);
}
return number == rebmun;
}
然后你的测试成为:
if (is_palindrome(c) && (c > h))
答案 2 :(得分:0)
对于第一个问题,正确的缩进可能会说清楚:
int h = 0;
for(int a = 100; a<1000; a++)
for(int b = 100; b<1000; b++)
int c = a * b;
if ((c == reverse(c)) && (c > h))
h = c;
有一些额外的括号:
int h = 0;
for(int a = 100; a<1000; a++)
{
for(int b = 100; b<1000; b++)
{
int c = a * b;
if ((c == reverse(c)) && (c > h))
h = c;
}
}
至于itoa
问题,其签名是:
char * itoa ( int value, char * str, int base );
所以你不能只写itoa(x)
并期望它返回一个字符串。
有更好的方法可以在C ++中将int
转换为string
std::to_string
std::stringstream
将完成这项工作。像这样:
#include <sstream>
int reverse (int x)
{
std::stringstream ss;
ss << x;
string s(ss.str());
reverse(s.begin(), s.end());
return (x);
}
请注意,这不会返回int
反转。