解题思路:
对于每一个数 i,求出它的位数,用平方积%(int)pow(10,位数)得到尾数;

尾数与 i 比较,相同则输出;
参考代码:

#include<stdio.h>
#include<math.h>

int main()
{

long long S;  //存放平方
int len,ii;   //i的位数,和i的备份值

for(int i=0;i<=200000;i++)
{
   len=1;ii=i;   
   S=pow(i,2);

  while(ii>=10)    //求i的位数
  {
   ii/=10;
   len++;
  }

 if(S%(int)pow(10,len)==i)  //取尾数,看是否等于i
  printf("%d  ",i);
}
return 0;
}

别忘点赞哦-.-

点赞(29)
 

0.0分

25 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 16 条评论

正在努力 3年前 回复TA
请问末尾无空格的问题怎么解决啊
onemorecod 4年前 回复TA
#include <stdio.h>
#include <math.h>

int main()
{
	int i,t;
	int j,cnt;
	long long m,r,s;
	
	for( i=0;i<=200000;i++ ){
		cnt = 0;
		t = i/10;
		while( t!=0 ){
			cnt ++;
			t /=10;
		}
		m = pow(i,2)-i;
		r = m;
		for( j=0;j<=cnt;j++ ){
			m /=10;
		}
		s = m;
		for( j=0;j<=cnt;j++ ){
			s *=10;
		}if( r==s ){
			printf("%d ",i);
		}	
	}
	
    return 0;
}
格式错误0
煮酒老麦 4年前 回复TA
@煮酒老麦 @wenyajie 捕捉到了大佬本体,受教啦,另外我还想问,为啥我的vc2010不认识pow,我加math.h了,dev就可以
Manchester 4年前 回复TA
@得儿里个铛 这个情况 会出现的pow(10,2)有时也会出现99,低精度pow函数自定义一个使用,高精度才用pow()
Manchester 4年前 回复TA
@煮酒老麦 i是整数,i*i 返回值为int 型,但i*i的结果可能超出int 表示的范围。低精度计算一个数i的几次方用i*i*i....  高精度用pow(float,float),低精度用pow(),如pow(10,2)等会出现结果少一的情况得到99,低精度一般自己编写pow函数。
煮酒老麦 4年前 回复TA
将pow(i,2)换成i*i是不行的,求解答。。。
煮酒老麦 4年前 回复TA
我的这个因为int长度得关系,到一定数值之上就是输出错误了,看大佬们有办法修正吗?
#include<stdio.h>
int main()
{
	int i,s,v;
	printf("0  1");
	for(i=4;i<200001;i++){
		s=i*i-i;
		if(i<10)v=10;
		else if(i<100)v=100;
		else if(i<1000)v=1000;
		else if(i<10000)v=10000;
		else if(i<100000)v=100000;
		else if(i<200000)v=1000000;
		if(s%v==0){
			printf("  %d",i);
		}
	}
	return 0;
}
chenhj 5年前 回复TA
@还未秃头的小白 常量相乘溢出问题 : 使用 (long long) i * i ; 或者 s = iLL * iLL;
还未秃头的小白 5年前 回复TA
为什么我把S=pow(i,2)改为S=i*i,结果就不一样了
夷则廿一 5年前 回复TA
又学到了