直接上码上图吧=。
码里有很多printf测试,很容易看出玄机。另外有注释。都保留着,没删。
代码风格少儿不宜=。懒得整理了,请多多关照=。
# include <stdio.h>
# include <string.h>
# include <math.h>
int main()
{
int s,len,ev,i=1,k=0;
int s1,s2,s3,s4,sum;
double str1,str2,str3,str4,cutnum;
double str;
char str20[30]={0};
char str21[30]={0};
char test[30]={0};//缓存
char cut[30]={0};
//double str3[30]={0};
// double str4[30]={0};
scanf("%d",&s);
while(i<=s){
scanf("%s",str20);
//printf("初始化21为%s\n",str20);
// sprintf(str21,"%lf",str);
len=strlen(str20);
str=atof(str20);
for(k=0;k<len/2;k++){
cut[k]=str20[len/2+k];
}
//printf("初始化cut为%s\n",cut);
cutnum=atof(cut);//由于精度限制,cut一半
// printf("检测cut为%f\n",cutnum);
//str=strtod(str20,NULL);
//strncpy(str22,str21,4);
// str1=atof(str22);
// printf("初始化前4位为%s",str22);
// printf("初始化fuzhi为%lf\n",str);
if(len<16||len%4!=0) {
printf("%d\n",i);
i++;
continue;
}
else
{ ev=len/4;
strncpy(str21,str20,ev);
str1=atof(str21);
// strnset(str20,str1,ev);
// test=pow(10,w);
str=str-str1*pow(10,3*ev);
sprintf(test,"%f",str);//写入字符串
strncpy(str21,test,ev);
str2=atof(str21);
// printf("测试第二位为%f",str2);
/* str=str-str2*pow(10,2*ev);
sprintf(test,"%f",str);//写入字符串*/
strncpy(str21,cut,ev);
str3=atof(str21);
//for(k=3;k<4;k++){str3=test;}
// printf("str是%f\n",str);
// printf("jianshu是%f\n",str3*pow(10,ev));
str4=cutnum-str3*pow(10,ev);
// printf("1是%.0f\n",str1);
// printf("2是%f\n",str2);
// printf("3是%f\n",str3);
// printf("4是%f\n",str4);
if((str1+1)!=str2||str2!=str3||(str3+1)!=str4)
{
printf("%d\n",i);
// printf("外围");
i++;
continue;
}
//ABBC,B为4、5、7
else{
sum=(int)str2;
sprintf(test,"%d",sum);//因为str后有小数,所以先洗数据
len=strlen(test);//所以长度中不包含小数位.000000
// printf("B=%d",sum);//ABBC
// printf("test=%s",test);
// printf("len=%d",len);
if(len==6){printf("%d\n",i);
i++;
continue;
}
if(len==4){
s4=sum%10;
// printf("4=%d",s4);
s3=(sum/10)%10;
// printf("3=%d",s3);
s2=(sum/100)%10;
// printf("2=%d",s2);
s1=sum/1000;
// printf("1=%d",s1);
if((s1+1)!=s2||s2!=s3||(s3+1)!=s4)
{
printf("%d\n",i);
i++;
continue;
}
}
if(len==5){
s4=sum%100;
// printf("4=%d\n",s4);
s3=(sum/100)%10;
// printf("3=%d\n",s3);
s2=(sum/1000)%10;
// printf("2=%d\n",s2);
s1=sum/10000;
// printf("1=%d\n",s1);
if((s1+1)!=s2||s2!=s3||(s3+1)!=s4)
{
printf("%d\n",i);
i++;
continue;
}
}
if(len==7){
s4=sum%100;
s3=(sum/100)%100;
s2=(sum/10000)%100;
s1=sum/1000000;
if((s1+1)!=s2||s2!=s3||(s3+1)!=s4)
{
printf("%d\n",i);
i++;
continue;
}
}
}//else,内Q
}//外else
i++;
}//while
return 0;
}
附1-cut效果图
2-原数据测试