hdoj 1313(这个程序写的真糟糕)
来源:互联网 发布:中国域名网 编辑:程序博客网 时间:2024/05/17 05:06
1 在失败当中寻找成功。#include<iostream>#include<stdio.h>#include<string>#include<algorithm>using namespace std;#define MAX 100char 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会不相同。*/