首頁>Program>source

對於以下代碼:

int digsum(ll num) {  //function to calculate sum of digits
    if (num < 0)
        num = abs(num);
    int ans = 0;
    while (num != 0) {
        ans = ans + num % 10;
        num = num / 10;
    }
    return ans;
}
int main() {
    ios_base::sync_with_stdio(0); cin.tie(0);
    int a, b, c, cnt = 0;
    long long x;
    cin >> a >> b >> c;
    for (int i = 0; i <= 72; i++) {
        x = (b * (pow(i, a))) + c;
        if (i == digsum(x) && x < mod) {
            cout << x << " ";
        }
    }
    return 0;
}

如果是 a,b,c = 3,2,8 分別和 i=19; pow(19,3) 應该計算19 ^ 3,但是当我替換 pow 到(19x19x19)時,此特定情况已得到满足,而 pow並非如此 功能。 有人可以解釋這个問题是什麼吗?

最新回復
  • 6月前
    1 #

    我的靈通能力表明您的標準庫對 pow的實現 不精確.我迴想起有關该主题的讨論.記住, pow 返迴浮點值.我無法對其进行複製,但這完全可能是您對 pow(19,3)的呼叫 返迴 6858.999999999 或由於其優化方式而相似。

    實際上,此頁面上的內容如下:

    Due to rounding errors in floating point numbers, the results of pow() may not be precise (even if you pass it integers or whole numbers).

    此外,這个問题和答案也暗示了同樣的事情。

    我不会怀疑的,但是你去了。

    考虑這樣做是一種解決方法:

    long long power = nearbyint(pow(i,a));
    x = b * power + c;
    

  • c++:矩陣中的行和列的总和
  • apache:htaccess重寫任何檔案夹,但不重寫任何檔案