解题思路:
首先,用函数计算一个整数是否为平方数,为平方数,才可继续计算是否能由两个平方数拼接;然后,将平方数的每位数字变成字符存入字符串,从低址到高址分别存放从低位到高位的数字,为了模拟原数,需要反转字符串存入另一字符数组;接下来,找到两段字符串的分界点,用来分开后拼接,在分界点之前取得前段字符串,在分界点之后取得后段字符串,再转换成对应的两个整数,若非零并且都为平方数,原数即为拼接平方数。
注意事项:
为了取得前后两段字符串,本想用strncpy函数,可惜经测试发现:拷贝串后无法为串尾加结束符'\0',只好改用循环,通过下标访问两段新串,找到串尾,加上结束符。
参考代码:
#include<stdio.h> #include<math.h> #include<stdlib.h> int main(){ int is_p(int); int is_pp(int); int i,a,b; scanf("%d%d",&a,&b); for(i=a;i<=b;i++) if(is_pp(i)) printf("%d\n",i); //拼接平方数 return 0; } int is_p(int a){ int x=(int)sqrt(a); if(x*x==a) return 1; //平方数 else return 0; } int is_pp(int n){ char c,s[10],a[10],b[10]; int x,y,l,m,j,i=0; if(is_p(n)){ while(n){ a[i++]=n%10+'0'; //每位数字变成字符反向入串 n/=10; } a[i]='\0'; for(j=0;j<i;j++) s[j]=a[i-j-1]; //反转字符串 s[j]='\0'; a[0]=b[0]='\0'; for(i=1;i<j;i++){ //找到两段字符串的分界点 for(m=0;m<i;m++) a[m]=s[m]; a[m]='\0'; //取得前段字符串 for(m=i;m<j;m++) b[m-i]=s[m]; b[m-i]='\0'; //取得后段字符串 x=atoi(a); //前段对应的整数 y=atoi(b); //后段对应的整数 printf("%d %d\n",x,y); //观察中间结果 if(x&&y&&is_p(x)&&is_p(y)) return 1; } } return 0; }
0.0分
3 人评分
字符串问题 (C语言代码)浏览:1477 |
WU-蓝桥杯算法提高VIP-企业奖金发放 (C++代码)浏览:1158 |
WU-输入输出格式练习 (C++代码)浏览:1071 |
WU-判定字符位置 (C++代码)浏览:1395 |
C语言程序设计教程(第三版)课后习题8.4 (C语言代码)浏览:603 |
【计算两点间的距离】 (C语言代码)浏览:1473 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:509 |
班级人数 (C语言代码)浏览:919 |
C语言程序设计教程(第三版)课后习题7.3 (C语言代码)浏览:521 |
母牛的故事 (C语言代码)浏览:451 |