读书人

C语言中的算法转换到C#什么得出的结果

发布时间: 2012-06-03 16:59:40 作者: rapoo

C语言中的算法转换到C#,什么得出的结果会出现不同?

题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。请看具体分析:

程序源代码:
#include "math.h"
main()
{
long int i,x,y,z;
for (i=1;i<100000;i++)
 { x=sqrt(i+100); /*x为加上100后开方后的结果*/
  y=sqrt(i+268); /*y为再加上168后开方后的结果*/
   if(x*x==i+100&&y*y==i+268)
/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/
    printf("\n%ld\n",i);
 }
}


我照着C语言里的格式用C#写了出来.但是为什么结果会与VC6里的结果不一样呢?
求解


C# code
using System;using System.Collections.Generic;using System.Text;namespace 完全平方数{    class Program    {        static void Main(string[] args)        {            double i,x,y,z;            for(i=1;i<1000;i++)            {                x=Math.Sqrt(i+100);                y=Math.Sqrt(i+268);                if (x * x == i + 100 && y * y == i + 268)                {                    Console.WriteLine("\n {0} \n", i);                }                            }            Console.ReadKey();        }    }}


[解决办法]
错了,int可能溢出,做好用long

using System;
using System.Collections.Generic;
using System.Text;

namespace 完全平方数
{
class Program
{
static void Main(string[] args)
{
long i,x,y,z;
for(i=1;i<1000;i++)
{
x=(long)Math.Sqrt((double)i+100);
y=(long)Math.Sqrt((double)i+268);
if (x * x == i + 100 && y * y == i + 268)
{
Console.WriteLine("\n {0} \n", i);
}


}
Console.ReadKey();
}
}
}

读书人网 >C#

热点推荐