首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >赋值给变量时,数值会发生变化吗?

赋值给变量时,数值会发生变化吗?
EN

Stack Overflow用户
提问于 2013-05-21 19:22:25
回答 1查看 108关注 0票数 0

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

代码语言:javascript
复制
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

下面是代码:

代码语言:javascript
复制
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;
}

很有可能我遗漏了一些非常明显的东西,但我不能弄清楚。

代码语言:javascript
复制
((found+1)*pow(26,(str.size()-(i+1)))) 

正在进行计算,并且它正在做它应该做的事情,则cout语句中的结果是正确的。但在前两个赋值中,该变量被减去1。

EN

回答 1

Stack Overflow用户

发布于 2013-05-21 19:33:48

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

cout还将浮点数舍入为6位有效数字,具体取决于配置。676.0是比675.999更好的近似值,因此您可以在输出中看到676

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

代码语言:javascript
复制
unsigned long long currentFactor = 1;
for (...) {
    ...
    unsigned long long add = currentFactor * (found+1);
    wvalue += add;
    currentFactor *= 26;
}

还请注意,您不必在字母串中查找字符。您也可以只使用字符算术来完成此操作:

代码语言:javascript
复制
int charNumber(char c) {
    if (c >= 'a' && c <= 'z')
        return c - 'a';   // calculate the position of c relative to 'a'
    else
        return -1;        // error
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16668760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档