gpt4 book ai didi

c - 为什么 x * x 计算错误?

转载 作者:太空宇宙 更新时间:2023-11-04 00:35:09 28 4
gpt4 key购买 nike

我正在尝试在数组中找到第一个元素 3 和下一个元素按照以下规则构建的 nth 数字:v[i] = (v [i - 1] * v[i - 1]/(i + 2) + v[i - 1] * i + i + 1) % 666013。其中 v 是数组。我认为我的代码可以正常工作,但我遇到了下一个问题。对于 n = 7,首先 y = 600198,然后在下一步 y = 3755353636,但我期望 y在那一步是 360237639204。为什么会这样?我在 Windows 7 旗舰版 x64 上使用 Visual Studio 2017。

#define _CRT_SECURE_NO_DEPRECATE
#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>

int main()
{
FILE *input;
if ((input = fopen("C:\\Users\\HP\\Documents\\Visual Studio 2017\\Projects\\ConsoleApplication2\\hex.in", "r")) == NULL)
{
perror("Error opening hex.in\n");
return 1;
}
FILE *output;
if ((output = fopen("hex.out", "w+")) == NULL)
{
perror("Error opening hex.out\n");
return 1;
}
int n;
fscanf_s(input, "%d", &n);
int i = 1;
unsigned long x = 3;
unsigned long y = 8;
bool found = false;
while(!found)
{
if (i == n)
{
found = true;
fprintf(output, "%d", x);
}
i++;
x = y;
y = x * x;//for i = 7 I expect y to be 360237639204 after this step
y /= (i + 2);
y += x * i;
y += i + 1;
y %= 666013;
}
fclose(input);
fclose(output);
return 0;
}

最佳答案

Visual Studio C++ 编译器仍然将 long(当然还有 unsigned long)作为 32 位数据类型。如果您需要(至少)64 位整数数据类型,请使用 long long

关于c - 为什么 x * x 计算错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44460193/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com