完全平方编程
㈠ 用C++编程求出一个四位完全平方数,前两个数字相同,后两个数字相同。
【解题思路】
一个数若能表示成某个整数的平方的形式,则称这个数为完全平方数。比如:0,1,4,9,16,25,……。
本题有两个关键点:第一个是找出四位数的完全平方数;第二个是判断这个完全平方数是不是前两位相同,并且后两位也相同。
第一个问题比较简单,四位数是从1000到9999之间,但是不需要从1000开始一个一个去判断是否完全平方数,这样做要检测9000个,每个数还要看看是不是完全平方数,计算量很大。事实上只需要从32开始到99,逐个取平方就可以得到所有四位数的完全平方数。(因为31的平方是三位数,而100的平方是五位数,所以只需要在32到99的平方数中一个个找下去就可以了)。
第二个问题可以巧妙利用C语言中的取余运算符%和整型变量除法规则来实现。比如要对1234进行上述比较,可以先把1234分成两截,办法如下:inta=1234/100;intb=1234%100;因为C语言中整数除法会自动忽略小数部分,所以inta=1234/100的结果就是a=12;而取余运算符是得到余数,所以intb=1234%100的意思就是1234除以100的余数,结果就是b=34,这样就成功把1234分成12和34两段,然后再分别判断a和b个位和十位是否相同就可以了。判断的方法如下:if(a/10==a%10),因为a/10会得到a的十位数,而a%10会得到a的个位数,所以只要这两个相等,就说明a的个位和十位相同,因此上题的具体代码如下:
【程序代码】
#include<iostream>//控制台操作头文件
intmain()//主函数
{inti,a,b;//整型变量
printf("前两位和后两位分别相同的四位完全平方数有:");
for(i=32;i<100;i++)//通过循环逐个检测四位数完全平方数
{a=(i*i)/100;//得到完全平方数的前两位
b=(i*i)%100;//得到完全平方数的后两位
if(a/10==a%10&&b/10==b%10)//如果前两位和后两位分别相同
printf("%d(%d的平方)",i*i,i);}//输出这个四位数的完全平方数
printf(" ");//换行
system("PAUSE");//屏幕暂停,以便看到显示结果
return0;}//结束程序
【运行结果】
以上程序在DEVC++中运行通过,运行结果是只有7744这个数符合要求,它是88的平方。具体截图如下:
㈡ C语言 完全平方数
#include "stdio.h"
#include "math.h"
void main()
{ long i,j,k,a,b;
for(i=1;i<10;i++)
for(j=0;j<10;j++)
{a=100*i+10*j+i;
b=sqrt(a);
if(a==b*b)
printf("%d\n",a);}
for(i=1;i<10;i++)
for(j=0;j<10;j++)
for(k=0;k<10;k++)
{a=10000*i+1000*j+100*k+10*j+i;
b=sqrt(a);
if(a==b*b)
printf("%ld\n",a);}
getch();
}
㈢ 用C语言编程, 求符合下列条件的四位完全平方数(某个正整数A是另一个正整数B的平方,则称A为完全平
//#include"stdafx.h"//Ifthevc++6.0,withthisline.
#include"stdio.h"
intmain(void){
inti,m;
for(i=99;i>31;i--)
if(m=i*i,m/1000+m/10%10==m%10*(m/100%10))
break;
printf("Thisnumberis%d. ",m);
return0;
}
㈣ 编程完全平方数 C++
一种解法是求出所有可能的正整数相乘的数的集合,对集合排序,然后从大到小检查是否是完全平方数,返回第一个结果。
㈤ 如何编程输出200以内所有的完全平方数及其个数
#include<stdio.h>
int main(void)
{
int a=0,c,b=0;
while(a*a<200)
{
c=a*a;
printf("%d",c);
printf("\n");
b++;
a++;
}
printf("个数有%d个",b);
getchar();
}
重新想了下 ,你看对不对。应该没错了。
㈥ 编程完全平方数 (number.cpp/c/pas)
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<ctime>
#include<string>
#include<cstring>
#include<queue>
#define rep(i,n) for(i=1;i<=n;i++)
#define ll long long
using namespace std;
const int maxn=5000100;
const int mod=100000007;
bool zs[maxn];
int n;
void mk()
{
scanf("%d",&n);
int i,j;
for(i=2;i<=n/2+1;i++)
{
if(!zs[i])
{
for(j=2; i*j <=n;j++)
zs[i*j]=1;
}
}
}
ll qh(ll v)
{
ll ans=0;
ll x=n;
for(;x;x/=v,ans+=x);
return ans;
}
ll ksm(int a,ll b)
{
ll ans=1,x=a%mod;
for(;b;b/=2,x=(x*x)%mod)
if(b&1)
ans=(ans*x)%mod;
return ans;
}
void solve()
{
ll j,sum,ans=1;
int i;
for(i=2;i<=n/2+1;i++)
{
if(!zs[i])
{
j=0;
sum=qh(i);
if(sum&1) sum--;
if(sum!=0)
j=ksm(i,sum);
if(j!=0)
ans=(ans*j)%mod;
}
}
printf("%I64d\n",ans);
}
int main()
{
//int tim=clock();
freopen("number.in","r",stdin);
freopen("number.out","w",stdout);
mk();
solve();
//printf("%d",clock()-tim);
//printf("%d",qh(2));
}
㈦ 求完全平方数的编程
for循环参数有问题,自加用","分隔,不要用";"
if中的判定用“&&”做与运算,";"不对
以上是语法问题,至于你的逻辑,也很乱啊,稍微等一下,我理理思路
#include<stdio.h>
intiswanshu(intn)
{
inti,j,count;
i=count=0;
j=n;
while(i!=1)
{
i=n/2;
if(n%2!=0)
i++;
if(j%i!=0)
{
return0;
}
if((i%2)!=0&&i>1)
count++;
n=i;
}
if(count>0)
{
return1;
}else{
return0;
}
}
intcheckagain(intn)
{
inti,sum;
sum=0;
for(i=1;i<n;i++)
{
if(n%i==0)
sum=sum+i;
}
if(sum==n){
return1;
}else{
return0;
}
}
printwanshu(intn)
{
inti;
i=0;
printf("%ditsfactorsare",n);
while(i!=1)
{
i=n/2;
if(n%2!=0)
i++;
printf("%d,",i);
n=i;
}
printf(" ");
}
main()
{
inti,n;
while(1)
{
printf("本程序将实现输出1-n之间的完数,n>=1 现在请输入n:");
scanf("%d",&n);
printf("你输入的数是%d ",n);
if(n>=1)
break;
}
for(i=1;i<=n;i++)
{
if(iswanshu(i)==1&&checkagain(i)==1)
printwanshu(i);
}
}