C++ 当分配给变量时,数字是否会改变值?

C++ 当分配给变量时,数字是否会改变值?,c++,C++,我在给变量赋值时遇到了一个小问题,这是我第一次遇到这种情况。我使用“aaa”作为参数调用Convert(),以下是我的输出: aaa **676** *(value from cout)* = 26^(3-1)*1 **675** *(value of the variable)* +26 = 26^(3-2)*1 700 +1 = 26^(3-3)*1 701 701 下面是代码: string alphabet="abcdefghijklmnopqrstuvwxy

我在给变量赋值时遇到了一个小问题,这是我第一次遇到这种情况。我使用“aaa”作为参数调用Convert(),以下是我的输出:

aaa

**676** *(value  from cout)* = 26^(3-1)*1        **675** *(value of the variable)*

+26 = 26^(3-2)*1 700

+1 = 26^(3-3)*1  701

701
下面是代码:

string alphabet="abcdefghijklmnopqrstuvwxyz";

unsigned long long Convert(string &str){
  unsigned long long wvalue=0;
  for(int i=0;i<str.size();++i){
    size_t found=alphabet.find(str[i]);
    if(found==string::npos)
      cout<<"Please enter only lowercase letters of the english alphabet!"<<endl;

    unsigned long long add=((found+1)*pow(26,(str.size()-(i+1))));
    wvalue+=add;
    if(i>0)cout<<"+";
    cout<<"\t"<<((found+1)*pow(26,(str.size()-(i+1))))<<" = "<<"26^("<<str.size()<<"-"<<(i+1)  <<")*"<<(found+1)<<"\t"<<wvalue<<endl;
  }
  return wvalue;
}

正在进行计算,并且按照预期的方式进行,计算结果是正确的。但是变量在前两个赋值中被减1

pow是一个浮点函数。它接受并返回浮点数。将浮点数赋给整型变量会将其截断为整型数,因此它可能在赋给整型变量
add
之前就已经是
675.9999999
,当赋给整型变量
add
时,它将变成
675

cout
还根据配置对浮点数进行舍入,例如将其舍入为6位有效数字
676.0
675.999
更接近,因此您可以在输出中看到
676

因为你不想用实数计算,而只想用整数,你最好还是用积分函数。要将26乘以
n
,最好使用乘法
n
次。由于您已经使用了循环,并且希望每个字符的下一次幂为26,因此最好添加一个保持当前幂值的变量,如下所示:

unsigned long long currentFactor = 1;
for (...) {
    ...
    unsigned long long add = currentFactor * (found+1);
    wvalue += add;
    currentFactor *= 26;
}
还请注意,您不必在字母表字符串中查找字符。您也可以使用字符算术来执行此操作:

int charNumber(char c) {
    if (c >= 'a' && c <= 'z')
        return c - 'a';   // calculate the position of c relative to 'a'
    else
        return -1;        // error
}
int字符数(字符c){

如果(c>='a'&&c感谢您的回答。我仍然不明白为什么从double转换为int时26^2会被截断为25,但至少我知道这是怎么回事,并可以相应地采取行动。我刚刚注意到,您希望最右边(最后一个)的字符在和中具有最低有效值。要实现这一点,请使用“在每个步骤中进行乘法”技术,您必须在字符串上反向迭代。我建议为此使用迭代器。要反向迭代,只需使用
string.rbegin()
string.rend()
并在每一步中递增迭代器。可以找到一个例子。对于浮点舍入错误,。我知道它很长,您不必全部阅读,但特别是关于舍入错误的部分解释了代码中发生的情况。感谢您的输入,尽管我只希望有一天能够理解此类文章。我最终写了一篇g我的pow函数,如果只应用于intgers,它相当简单。
int charNumber(char c) {
    if (c >= 'a' && c <= 'z')
        return c - 'a';   // calculate the position of c relative to 'a'
    else
        return -1;        // error
}