我正在学习自己的c++,我想:“我在哪里可以找到一些要解决的问题?” ...好吧,阅读stackoverflow时,我对euler项目很感兴趣,而我就在这里。
我正在做第四个问题(顺便问一句,不寻求帮助),但是我有一个非常奇怪的问题...
在这段代码中,我想用“数字”分隔一个数字...这样我可以说:如果数字的第一个数字等于最后一个数字,则它是回文数(可以从左到右读取的数字)或从右到左将是相同的数字...例如:90009)。
一切都很好,但是问题是当我尝试将数组元素划分为幂时...
例如:
90009 / power(10,4)= 9对吗? (当然使用整数)...
好吧,代码将9分配给arregloDeNumero [4],然后
arregloDeNumero [4] * pow(10,4)= 89999:O:O ??????????
它必须是90000对吗?
此外,如果您想运行此功能并在我的脑海中看到它的工作方式,我会放一些cout <
但是我的问题是:我写了一些不好的代码,还是某种错误或缺乏知识?
void verificarPalindromo(int x)
{
int arregloDeNumero[6];
int diferencia=0;
for (int i=5;i>=0;i--){
cout << "the number X is: " << x;
cout << "and the difference is: " << diferencia << endl;
arregloDeNumero[i]= ((x-diferencia)/pow(10,i));
cout << "array of i= " << i << "is: " << arregloDeNumero[i];
cout << " and the difference is: " << diferencia << endl;
diferencia+=(arregloDeNumero[i]*pow(10,i));
cout << "the new difference is: " << diferencia << endl;
}
}
最佳答案
尽管您的代码不包含任何浮点数,但是pow()
函数返回double
,并且您对浮点数的理解似乎存在问题。通常情况下,除以浮点数可能会导致其值与实际结果略有不同(也许只有一位)。当此类值转换为整数时,它将被截断并导致下一个较低的整数。
你应该
a)使用完全使用整数实现的策略,或
b)使用浮点,但要确保对int的转换使用舍入而不是截断。
如果您具有足够高的警告级别,则编译器应告知您有关此潜在问题的信息。
明确地说,我认为问题出在这里:
((x-diferencia)/pow(10,i))
pow()对整数参数的结果将是一个整数值,但是由于类型为double,所以除法也是double。通常是浮点除法引起轻微错误的问题。以下更改可能会解决它。
((x-diferencia)/(int)pow(10,i))