使用char类型将decimal转换为string,将string转换为decimal



我的代码没有给我确切的值。有人能告诉我怎么了吗?一些值给了我正确的答案,但试试787980等,你就会知道了。

如果你能以某种方式纠正它,那就太好了。

//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;
}

相关内容

  • 没有找到相关文章

最新更新