C 谁是赢家?

C 谁是赢家?,c,C,我是C语言的新手。我已经编写了代码,但我似乎无法找到为什么输出没有显示出来 问题2:谁是赢家?(二级) •问题描述 爱丽丝和鲍勃正在玩游戏。他们都写下一个整数。如果两个整数之和是一个整数的平方,爱丽丝就赢了。如果总和的倒数是整数的平方,则Bob获胜。如果双方都不赢,或者双方都赢,那就是平局 例如,爱丽丝写了一个8,鲍勃写了一个10。18不是任何整数的平方。但是81是9的平方。所以鲍勃是赢家。 写一个程序,取两个整数并输出游戏的赢家 •输入和输出要求 输入两个正整数。输出应遵循示例结果中所示的格

我是C语言的新手。我已经编写了代码,但我似乎无法找到为什么输出没有显示出来

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

•问题描述 爱丽丝和鲍勃正在玩游戏。他们都写下一个整数。如果两个整数之和是一个整数的平方,爱丽丝就赢了。如果总和的倒数是整数的平方,则Bob获胜。如果双方都不赢,或者双方都赢,那就是平局

例如,爱丽丝写了一个8,鲍勃写了一个10。18不是任何整数的平方。但是81是9的平方。所以鲍勃是赢家。 写一个程序,取两个整数并输出游戏的赢家

•输入和输出要求

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

样本1

样本2

代码:

#include <stdio.h>

int reverse(int numOne, int numTwo)
{
  int rev;
  rev = numTwo*10 + numOne;

  return rev;
}

int issquare(int num)
{
  int i, valid;
  valid = 0;
  for(i = 0; i < num; i++)
  {
    if((i*i) == num)
    {
      valid = 1;
    }
  }
  return valid;
}
int main()
{
  int num1, num2, normal, rev, alice, bob;
  scanf("%d %d", &num1, &num2);
  printf("%d %d", num1, num2);
  rev = reverse(num1, num2);
  normal = num1*10 + num2;
  bob = issquare(normal);
  alice = issquare(rev);
  if(bob==1)
  {
    if(alice==1)
    {
      printf("Tie");
    }
  }
  if(bob==1)
  {
    if(alice==0)
    {
      printf("Bob wins.");
    }
  }
  if(alice==1)
  {
    if(bob==0)
    {
      printf("Alice wins.");
    }
  }

  return 0;
}
#包括
内翻(内翻货币,内翻货币)
{
国际修订版;
rev=numTwo*10+numOne;
返回版本;
}
整数平方(整数)
{
int i,有效;
有效=0;
对于(i=0;i
必须是
bob==0
alice==0
的大小写。在else语句中添加打印语句,您将知道原因。你的死刑在某种程度上证明了这一点

同样在
issquare
中,应该有这样的循环


for(i=0;i计算
normal
的方法不正确

normal=num1+num2;
您为
反转编写的函数也不正确

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;
}
而且您也没有检查都丢失的情况。
同时添加该条件。

尝试调试您的代码。这通常会有帮助。使用所有警告和调试信息编译:
gcc-Wall-Wextra-g
with.Think。改进代码以不获得警告。使用调试器
gdb
。思考。重复,直到您满意为止。修复我的代码和完成我的家庭作业问题不在这里讨论。欢迎来到StackOverflow。这是正在进行的比赛的一部分吗?哎呀,很抱歉给你添麻烦。谢谢你的建议。有没有一个部分可以教我如何正确使用StackOverflow?你好,yajiv,谢谢你的回复。
#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;
}
normal=num1+num2;
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;
}