题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?(100000以内)这是我的c++程序?#include <iostream>
#include <complex>//#include <ios>using namespace std;
void main(void)
{
float  i,x,y;//输入一个数
for(i=0;i<100000;i++)
{x=sqrt(i+100);
 y=sqrt(i+268);
if(x*x==i+100&&y*y==i+268)
cout<<"完全平方数是"<<i<<endl;
   
}
}

解决方案 »

  1.   

    怎么转换成java程序
    是不是能写成这样的?import java.io.*; 
    import java.math.*;
    public class cl {
       public static void main(String[] args)throws IOException{
           float i,x = 0,y = 0;
           for(i=0;i<100000;i++)
            /*for(x=0;x<100000;x++)
            for(y=0;y<100000;y++)*/
           {
            System.out.println(x=(float) Math.sqrt(i+100));
            System.out.println(x=(float) Math.sqrt(i+268));
            
           }
                 if(x*x==i+100&&y*y==i+268);
      System.out.println("wangquanpoingfa"+i);
        
    }
    }真的不知道if//在这里怎么就出错了;对java的机制十分不了解?
      

  2.   

    首先要说明一下,你用浮点类型来比较是否相等,这不太好.(精度问题)
    其次,你的if 应该放在 for 循环里面,不然只是在检测10000是否符合
    最后,这跟java机制没多大关系,算法而已.import java.io.*; 
    import java.math.*;
    public class cl {
       public static void main(String[] args)throws IOException{
           int i,x = 0,y = 0;
           for(i=0;i<100000;i++)
           {
            x= (int)Math.sqrt(i+100);
            y= (int)Math.sqrt(i+268);      
            
            if (x*x == (i+100) && y*y == (i + 268))
            {
             System.out.println("x*x=" + x*x +"\t(i+100)="+(i+100));
             System.out.println("y*y=" + y*y +"\t(i+268)="+(i+268));
             System.out.println("i  =" + i);
            }  
                      
           }    
    }
    }
      

  3.   

    F:\>java cl
    x*x=121 (i+100)=121
    y*y=289 (i+268)=289
    i  =21
    x*x=361 (i+100)=361
    y*y=529 (i+268)=529
    i  =261
    x*x=1681        (i+100)=1681
    y*y=1849        (i+268)=1849
    i  =1581
      

  4.   

    if(x*x==i+100&&y*y==i+268);  //注意你这里有个 分号 !!!这句话你放到c里一样得不到结果!!!自己粗心,不要怪java,
      

  5.   

    我写的这个程序循环次数少点,任意修改m和n的值也没有问题。public class Test {
      
    /** 
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub

    //m, n用于存储2个用于相加的数。
    int m, n;
    m = 100;
    n = 168;

    int step = n - m;
    int a, b;
    int x;
    boolean flag = false;
    if(step % 2 ==0)
    x = 2;
    else
    x = 3;
    for(;;x+=2){
    if(step % x != 0)
    if(step/x<3)
    break;
    else
    continue;
    else{
    //求出等差数列的两端 
    a = step/x - x + 1;
    b = step/x + x - 1;
    //求出对应的数
    a = (a-1)/2;
    b = (b+1)/2;
    //判断是否符合条件 
    if(b*b - a*a == step){
    flag = true;
    System.out.print("这个数为");
    System.out.println(a*a - m);
    break;
    }
    }
    }
    if(!flag)
    System.out.println("该数不存在");
    }}