我的代码没有给我确切的值。有人能告诉我怎么了吗?一些值给了我正确的答案,但试试78
、79
、80
等,你就会知道了。
如果你能以某种方式纠正它,那就太好了。
//hi // Example program
#include <iostream>
#include <string>
using namespace std;
int stringToDecimal(string X)
{
int digit = 0;
//I believe there is some fault here.
for (int i = 0;i < (X.length() -1); i++)
{
char c = X[i] + 48;
digit = (c + (10 ^ i) )+ digit;
}
return digit;
}
int countDigit(int n)
{
int count = 0;
while (n != 0) {
n = n / 10;
++count;
}
return count;
}
//I believe there is some fault here too
string DecimalToString(int x)
{
string a= "";
for (int i =0 ; i < countDigit(x); i++)
{
char digit = (x / (10 ^ i)) % 10;
char c = digit + 48;
a = a +c;
}
cout << endl;
return a;
}
int main()
{
cout << "enter an integer" << endl;
int a;
cin >> a;
cout << DecimalToString(a) << endl;
cout << stringToDecimal(DecimalToString(a));
system("pause");
return 0;
}
IMHO,算法如下(也适用于二进制(:
Set value to zero.
For each digit (left to right):
multiply value by base (a.k.a. 10).
add in digit value
end-for
给定一个字符串作为输入,代码可能看起来有点像这样:
std::string number_as_text = "85";
int value = 0;
const size_t number_text_length = number_as_text.length();
for (unsigned int i = 0; i < number_text_length; ++i)
{
value = value * 10; // Shift left by one digit.
value += number_as_text[i] - '0';
}
该算法不需要除法,这让处理器非常高兴
没有浮点转换。
在行中:
digit = (c + (10 ^ i) )+ digit;
^
运算符不是求幂运算符,而是逐位xor运算符。
您需要使用std::pow
进行以下操作:
digit = (c + std::pow(10, i) )+ digit;
在其他函数中也必须执行类似的操作。
代替pow
函数,您还可以保留在循环中修改的变量:
int prod = 1;
for (...)
{
// ...
digit = (c + prod) + digit;
prod *= 10;
}