2020年1月13日 星期一

All you need is love

題目:
UVa-10193
Zerojudge d306
內容一樣,但是讀檔版本。

解題思路:
大致上就是把從二進位轉回十進位,然後判斷最大公因數。

程式碼:
#include<stdio.h>
#include"FileHandler.h"
int gcd(int a, int b)
{
 if (a == 0 || b == 0)
  return a + b;
 while ((a %= b) != 0 && (b %= a) != 0);
 return a + b;
}
int main()
{
 
 char *str = readAllTextFromFile("../love.txt");
 int n=0,i=0;
 while(str[i]!='\n')//read amount
 {
  n = str[i] - '0' + n * 10;//change char to int
  i++;
 }
 i++;
 for (int j = 0; j < n; j++)
 {
  int s1 = 0, s2 = 0,num1=0,num2=0,bi=1,x=0,check=0;
  while (str[i] != '\n'&&str[i]!=NULL)//read number s1
  {
   if (x == 0 && str[i] == '0')//if first digit is 0, it is invalid
    check = 1;
   s1 = str[i] - '0' + s1 * 10;
   i++;
   x++;
  }
  i++;
  x = 0;
  while (str[i] != '\n'&&str[i]!=NULL)//read number s2
  {
   if (x == 0 && str[i] == '0')
    check = 1;
   s2 = str[i] - '0' + s2 * 10;
   i++;
   x++;
  }
  i++;
  printf("%d %d\n", s1, s2);
  while (s1 > 0)//turn binary to decimal
  {
   num1 += (s1 % 10)*bi;
   bi *= 2;
   s1 /= 10;
  }
  bi = 1;
  while (s2 > 0)
  {
   num2 += (s2 % 10)*bi;
   bi *= 2;
   s2 /= 10;
  }
  
  printf("Pair #%d: ", j + 1);
  if (s1 < 0 || s2 < 0||check==1||num1<=1||num2<=1)//if each length smaller than 2 is also invalid
  {
   printf("invalid input.\n");
  }
  else if (gcd(num1, num2) != 1)
   printf("All you need is love!\n");
  else
   printf("Love is not you need!\n");
  if (str[i] == NULL)
   break;
 }
 system("pause");
 return 0;
}

沒有留言:

張貼留言