为什么我的结果都是no,代码也好像没有判断过s是否等于i,直接循环81次。
看了很久怎么也找不到原因,求解答!
#include
int s_(int a,int b,int c,int d,int *x)
{
int i,n,s=0;
for(i=0; i<=81; i++)
{
*x=(i+a)*(i+b)*(i+c)*(i+d);
n=x;
while(n)
{
s+=n%10;
n/=10;
}
if(s==i)
return 1;
}
return 0;
}
int main()
{
long long int x,n,i,s;
int a,b,c,d,k;
while(scanf("%d%d%d%d",&a,&b,&c,&d)!=EOF)
{
if(s_(a,b,c,d,&x))
printf("%lld\n",x);
else
printf("no\n");
}
return 0;
}
根据你的代码,我发现可能是以下两个问题导致结果一直为"no":
在函数s_中,当计算出的 n 赋值给 *x 后,你没有将s清零,导致s的值一直叠加,可能导致后面的判断出错。你可以在每次计算新的 n 时将 s 初始化为0。
在函数s_中,n=x的操作赋值的是指针x的值而不是变量x的值,导致后面的 s+=n%10 和 n/=10 操作出现问题。你需要将 n 改为 *x,以便对 x 指针所指向的变量进行操作。
针对以上两个问题,你可以尝试修改函数s_的代码如下:
int s_(int a,int b,int c,int d,int *x)
{
int i, n, s;
for(i = 0; i <= 81; i++)
{
*x = (i+a)*(i+b)*(i+c)*(i+d);
n = *x;
s = 0; // 在每次计算新的n时将s初始化为0
while(n)
{
s += n % 10;
n /= 10;
}
if(s == i)
return 1;
}
return 0;
}
确实对了,谢谢大佬!一开始我没用函数,把s=0放在for循环外面了,重新用函数写的时候又忘记了😅
不知道你这个问题是否已经解决, 如果还没有解决的话: