我是C的新手。我已经制作了代码,但我似乎无法找到输出无法显示的原因。
问题2:谁是赢家? (2级)
•问题描述 爱丽丝和鲍勃正在玩游戏。他们都写下整数。如果两个整数之和是整数的平方,则Alice赢得游戏。如果和的反转数是整数的平方,则Bob获胜。如果他们都没有获胜,或者他们两个都获胜,那就是平局。
例如,Alice写了一篇8,Bob写了一篇10. 18不是任何整数的平方。但是81是9的正方形。所以鲍勃是赢家。 编写一个程序来获取两个整数数字并输出游戏的获胜者。
•输入和输入产出要求
输入两个正整数。输出应遵循样本结果中显示的格式:
样本1
onClick
样本2
8 10
Bobs wins
代码:
2 2
Tie
答案 0 :(得分:0)
必须是bob == 0
和alice == 0
案例。在else语句中放置一个打印标记,你会知道为什么。你的执行是以某种方式做出这种情况。
同样在issquare
你应该像这样的循环
for(i = 0; i <= num; i++)
因为对于像1
这样的数字,它会失败。
你的逻辑也存在缺陷。你应该形成数字
8 10
您应该检查81
和18
。但在你的情况下,你不要这样做。(你检查90
和108
)。
#include <stdio.h>
#include <stdlib.h>
int reverse(int num)
{
int rev=0,inter = 0;
while(num){
inter = rev*10;
if( inter/10 != rev){
fprintf(stderr, "%s\n", "Overflow\n");
exit(1);
}
rev=inter+num%10;
num/=10;
}
return rev;
}
int issquare(int num)
{
for(int i = 0; i <= num; i++){
long long ii = i;
long long mul = ii*ii;
if( ii!= 0 && mul/ii != ii){
fprintf(stderr, "%s\n", "Overflow\n");
exit(1);
}
if(mul == num)
return 1;
else if(mul > num){
break;
}
}
return 0;
}
int main()
{
int num1, num2, normal, rev, alice, bob;
if( scanf("%d%d", &num1, &num2)!= 2){
fprintf(stderr,"Error in input\n");
exit(1);
}
printf("%d %d", num1, num2);
rev = reverse(num1+num2);
normal = num1+ num2;
bob = issquare(rev);
alice = issquare(normal);
if(bob==alice)
printf("Tie");
else if(bob > alice)
printf("Bob wins.");
else
printf("Alice wins.");
return 0;
}
答案 1 :(得分:0)
您计算normal
的方式不正确。
normal=num1+num2;
您为reverse
撰写的函数也不正确。
int reverse(int num1,int num2)
{
int sum=num1+num2;
int ans=0;
while(sum>0)
{
ans =ans*10 +(sum%10);
sum/=10;
}
return ans;
}
而且你也没有检查都输了的情况。 添加该条件。