解题思路:
对于每一个数 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; }
别忘点赞哦-.-
0.0分
28 人评分
#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
将pow(i,2)换成i*i是不行的,求解答。。。
Manchester 2020-03-04 21:26:26 |
i是整数,i*i 返回值为int 型,但i*i的结果可能超出int 表示的范围。低精度计算一个数i的几次方用i*i*i.... 高精度用pow(float,float),低精度用pow(),如pow(10,2)等会出现结果少一的情况得到99,低精度一般自己编写pow函数。
煮酒老麦 2020-03-05 12:33:42 |
@wenyajie 捕捉到了大佬本体,受教啦,另外我还想问,为啥我的vc2010不认识pow,我加math.h了,dev就可以
我的这个因为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; }
为什么我把S=pow(i,2)改为S=i*i,结果就不一样了
chenhj 2020-01-05 17:14:42 |
常量相乘溢出问题 : 使用 (long long) i * i ; 或者 s = iLL * iLL;
打水问题 (C语言代码)浏览:1148 |
C语言程序设计教程(第三版)课后习题6.2 (C语言代码)浏览:1432 |
【魔板】 (C++代码)(时间超限,希望会的帮我改正一下)浏览:804 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:688 |
C语言程序设计教程(第三版)课后习题9.8 (C语言代码)浏览:702 |
简单的a+b (C语言代码)浏览:457 |
简单的a+b (C语言代码)浏览:529 |
小九九 (C语言描述,不看要求真坑爹)浏览:1006 |
C二级辅导-同因查找 (C语言代码)浏览:618 |
链表数据求和操作 (C语言代码)浏览:1035 |