hdoj 1313(这个程序写的真糟糕)

1 在失败当中寻找成功。

#include<iostream>
#include<stdio.h>
#include<string>
#include<algorithm>
using namespace std;
#define MAX 100
char boss[MAX];int newboss[MAX];int newbosskey;int news[MAX];int newskey;

void boss_newboss()
{
 int i=0;char temp[MAX];
 newbosskey=strlen(boss)/2;
 for(i=0;i<strlen(boss);i++)
 {
  temp[strlen(boss)-i-1]=boss[i];
 }
 for(i=0;i<strlen(boss);i=i+2)
 {
  newboss[i/2]=(temp[i]-'0')+(temp[i+1]-'0')*10;
 }
}

void boss_news(int n)
{
 //转化分两部,第一部反转
 char temp[MAX];int i;

 //这个初始化很重呀,因为后边要乘,这里做是为啦不出现负值
 for(i=0;i<MAX;i++)
 {
  temp[i]='0';
 }
 for(i=0;i<strlen(boss);i++)
 {
  temp[i]=boss[strlen(boss)-1-i];
 }

 //反转完成以后,开始转存
 int pass[MAX];int passkey=strlen(boss)/2;
 for(i=0;i<=strlen(temp);i++,i++)//这里这样写是因为7到达8的时候也行
 {
  pass[i/2]=(temp[i]-'0')+(temp[i+1]-'0')*10;
 }


 //开始计算
 int carry=0;
 for(i=0;i<passkey;i++)
 {
  int result=pass[i]*n+carry;

  //如果说不能够除尽 
  if(result/100>0)
  {
   int zhen=result/100;
   int yush=result%100;
   pass[i]=yush;
   carry=zhen;
  }
  else
  {
   int yush=result%100;
   pass[i]=yush;
   carry=0;
  }
 }
 //最后一位
 int result=pass[passkey]*n+carry;
 if(result/100>0)
 {
  int zhen=result/100;
  int yush=result%100;
  pass[passkey]=yush;
  pass[passkey+1]=zhen;
  passkey++;
 }
 else
 {
  int yush=result%100;
  pass[passkey]=yush;
 }
 

 //输出
 for(i=0;i<passkey;i++)
 {
  news[i]=pass[i];
 }
 newskey=passkey;
}


int compare(const void *a,const void *b) 
{ 
 return *(int *)a-*(int *)b; 
} 
int same()
{
 if(newbosskey!=newskey)
 {
  return 0;
 }
 else
 {
  int j=0;
  for(j=0;j<newskey;j++)
  {
   if(newboss[j]!=news[j])
   {
    return 0;
   }
  }
  return 1;
 }
}
int main()
{
 freopen("input.txt","r",stdin);
 while(scanf("%s",boss)!=EOF)
 {
  boss_newboss();int i=1;int n=strlen(boss);int sameflag=1;
  for(i=1;i<=n;i++)
  {
   boss_news(i);

   qsort(newboss,newbosskey,sizeof(int),compare);
   qsort(news,newskey,sizeof(int),compare);

   if(!same())
   {
    sameflag=0;break;
   }
  }
  if(sameflag==0)
  {
   printf("%s is not cyclic\n",boss);
  }
  else
  {
   printf("%s is cyclic\n",boss);  
  }
 }
 return 0;
}

/*

1 char比较

  
int compare(const void *a,const void *b )
{
 return strcmp((char *)a,(char *)b);
} 

2 int比较

int compare(const void *a,const void *b) 
{ 
 return *(int *)a-*(int *)b; 
}

3
必须一个一个比较,如果两个两个的比较。
142857和428571会不相同。

*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值