标签:code set span com eof string nbsp flag 通过
1 #include<stdio.h> 2 #include<string.h> 3 #include<math.h> 4 #include<stdbool.h> 5 6 int main(void) 7 { 8 int j; 9 int a,b; 10 int num; 11 int vis[10005]; //用来记录是否出现 12 int vis2[10005]; //判断是否循环 13 int ok[10005]; 14 int flag = 0; 15 16 scanf("%d %d",&a,&b); 17 18 memset(vis,0,sizeof(vis)); //清空vis数组 19 memset(ok,0,sizeof(ok)); 20 21 for(num=a; num<=b; num++) 22 { 23 int cnt = 0; 24 int temp = num; 25 26 if(vis[temp]) //出现过就不是幸福数 27 { 28 continue; 29 } 30 memset(vis2,0,sizeof(vis2));//清空数组a 31 while(1) //迭代 32 { 33 int sum = 0; 34 while(temp) //对一个数的每位上的数字求平方并且相加 35 { 36 sum = sum+(temp%10)*(temp%10); 37 temp = temp/10; 38 } 39 if(sum>=a && sum<=b) 40 { 41 vis[sum] = 1; //标记数字已经出现过 //其他数字如果的跌倒到它就break 42 } 43 if(vis2[sum]) 44 { 45 vis[num] = 1; 46 break; 47 } 48 temp = sum; //从得到的值再进行迭代 49 cnt++; //独立性加1 50 vis2[sum] = 1; //同样是标记 如果别的数通过迭代碰到了这个 同样跳出即不是幸福数 51 if(sum==1) 52 { 53 ok[num] = cnt; 54 for(j=2; j<=sqrt(num); j++) //flag= 1就不是素数了 55 { 56 if(num%j == 0) 57 flag = 1; 58 } 59 60 if(flag == 0)//如果是素数 61 ok[num] = ok[num]*2; 62 flag = 0; 63 break; 64 } 65 } 66 } 67 68 bool f = false; 69 int i; 70 for(i=a; i<=b; i++) 71 { 72 if(vis[i]==0 && ok[i]>0) 73 { 74 printf("%d %d\n",i,ok[i]); 75 f = true; 76 } 77 } 78 if(!f) 79 { 80 printf("SAD"); 81 } 82 return 0; 83 }
标签:code set span com eof string nbsp flag 通过
原文地址:https://www.cnblogs.com/ZhengLijie/p/12491459.html