谁是赢家?

时间:2017-12-15 08:53:13

标签: c

我是C的新手。我已经制作了代码,但我似乎无法找到输出无法显示的原因。

This is the question

问题2:谁是赢家? (2级)

  

•问题描述   爱丽丝和鲍勃正在玩游戏。他们都写下整数。如果两个整数之和是整数的平方,则Alice赢得游戏。如果和的反转数是整数的平方,则Bob获胜。如果他们都没有获胜,或者他们两个都获胜,那就是平局。

     

例如,Alice写了一篇8,Bob写了一篇10. 18不是任何整数的平方。但是81是9的正方形。所以鲍勃是赢家。   编写一个程序来获取两个整数数字并输出游戏的获胜者。

     

•输入和输入产出要求

     

输入两个正整数。输出应遵循样本结果中显示的格式:

     

样本1

onClick
  

样本2

8 10
Bobs wins

代码:

2 2
Tie 

2 个答案:

答案 0 :(得分:0)

必须是bob == 0alice == 0案例。在else语句中放置一个打印标记,你会知道为什么。你的执行是以某种方式做出这种情况。

同样在issquare你应该像这样的循环

for(i = 0; i <= num; i++)因为对于像1这样的数字,它会失败。

你的逻辑也存在缺陷。你应该形成数字

8 10您应该检查8118。但在你的情况下,你不要这样做。(你检查90108)。

#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;
}

而且你也没有检查都输了的情况。 添加该条件。