有谁能在这个时候帮助我超越错误



**考虑以下顺序:7、77777、7777……设T是这个数列中能被2003整除的最小的元素。T有几个数字?**在这里输入代码

#include <iostream>
#include <stdio.h>
using namespace std;
int main() 
{
int a=0;
int count =0;
for(int i=1;;i++);
{
a=a*10+7;

if (a%2003==0)
{
break;
}
else 
{
count++;;
}
}
cout << count+1 ;
return 0;
}

这个问题中的所有内容在编译时都是已知的。所以让编译器来解决这个问题:

#include <stdio.h>
#include <cstddef>
consteval std::size_t solve() {
int a=0;
std::size_t count = 0;
do {
a = (a*10 +7) % 2003;
++count;
} while (a != 0);
return count;
}
int main() {
printf("%zdn", solve());
}

导致:

.LC0:
.string "%zdn"
main:
sub     rsp, 8
mov     esi, 1001
mov     edi, OFFSET FLAT:.LC0
xor     eax, eax
call    printf
xor     eax, eax
add     rsp, 8
ret

可以看到,这只调用printf以1001作为参数。

如果您打印a的值,您可以看到它在几次迭代后溢出。无论如何,这个错误是由无限循环引起的,所以你的进程被杀死了。

尝试将整型替换为double。

相关内容

  • 没有找到相关文章

最新更新