求(3+√5)的n次方的整数部分最后3位数字(舍去小数点后面),各位大神,这编程怎么解决啊?最好是C或OC

最后结果如果n是10的话就输出047,100的话就输出751

 #include <math.h>
int main()
{
    int n = 10;
    double d = 1;
    for (int i = 0; i < n; i++)
        d = d * (3 + sqrt(5));
    printf("%d", ((int)d) % 1000);
}

100次方是个很大的数,普通精度计算是不行的。
可以试试高精度计算:
http://www.apfloat.org/apfloat/

#include
int main()
{
int n = 10;
double d = 1;
if(n==0)
{
for (int i = 0; i < n; i++)
d = d * (3 + sqrt(5));
}

printf("%d", ((int)(d+0.5)) % 1000);//正数+0.5取整就是四舍五入

}

#include
int main()
{
int n = 10;
double d = 1;
if(n!=0)
{
for (int i = 0; i < n; i++)
d = d * (3 + sqrt(5));
}

printf("%d", ((int)(d+0.5)) % 1000);//正数+0.5取整就是四舍五入
}
//公司催着要电脑不等于打成了等于!不好意思!

如果你要求小数后面的精度是9位的话,1阶的时候有10位数字,乘法得到的数据如果没有被省略(且没有进位)应该是19位数,如果对精度要求很高的话,现有的乘法都不能用,你可以自己自定义乘法来编写这个程序,或者申请一个较大的内存块来存储每次计算的结果,当你要算n=100时,你要求的计算精度还那么高的话,你的计算结果估计要存储10*2^100这么多位的数据