**考虑以下顺序: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。