嗯。超琪数。哈

直接上码上图吧=。

码里有很多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-原数据测试


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值