六月陌 2020-09-09 17:55 采纳率: 0%
浏览 51

简单的C++中谜一样的错误?我啥也看不出来

发现一个迷

int row_num = 0;
for(int i=0,len = row.length();i<len;i++)
    {
        cout<<"1.row_num = "<<row_num<<"\n";
        cout<<(row[i]-'A'+1)*pow(26,len-1-i)<<"\n";
        row_num += ((row[i]-'A'+1)*pow(26,len-1-i));
        cout<<(row[i]-'A'+1)*pow(26,len-1-i)<<"\n";
        cout<<"2.row_num = "<<row_num<<"\n";
        cout<<"\n";
    }

(row[i]-'A'+1)*pow(26,len-1-i) 这个东西cout出来是26
,然后row_num 加上它,之后有输出了一遍 (row[i]-'A'+1)*pow(26,len-1-i) 这个还是26,在输出row_num发现是25,,,???好迷惑啊,到底是哪里的问题?(row_num我已经初始化为0了)

这是输出结果:

1.row_num = 0
26
26
2.row_num = 25

row是一个字符串,内容就是AA,第一次循环的时候row_num是25 ,第二次是1,最后结果是26.

但我觉得不应该是:第一次26,第二次1 结果27吗?

  • 写回答

1条回答 默认 最新

  • threenewbee 2020-09-09 20:01
    关注

    pow是浮点数,存在精度误差,应该结果四舍五入一下,而不是直接和别的整数做四则运算。

    评论

报告相同问题?