/* 首先声明这是http://poj.org/上的一个题,题号是2390 输入三个整数,R,M,Y分别代表整利率R%、初始金额M元和Y年 R取值0~20之间,M取值100~1000000之间,Y取值0~400之间 输出一个整数 例如:输入:5 5000 4 输出:6077 5代表年利率5%,5000代表5000元,4代表4年 过程: Year 1: 1.05 * 5000 = 5250 Year 2: 1.05 * 5250 = 5512.5 Year 3: 1.05 * 5512.50 = 5788.125 Year 4: 1.05 * 5788.125 = 6077.53125 The integer part of 6077.53125 is 6077. 这儿取整数不需要四舍五入 这道题中输入输出都是整型,而计算过程则需要双精度类型,不可避免的要用到强制转换类型,那该怎样转化呢?直接在double类型前加上(int)是不是可以了呢?还是有其他办法呢?然而对于题目范围的要求直接在double类型前加上(int)是不行的,这由编程实践得出,输入13 500000 6 输出双精度结果是1040975.876304,用强制转化(int)输出的结果是1000000,后面的40975就被舍弃了,由于不知道C语言中强制转化是如何实现的,望牛人指导!!! 不过这儿舍弃这种一般的方法,定义一个整型指针下面是*z,并给它分配一个double 类型的空间,也就是8个字节,将得到的双精度结果直接赋值给*z,然后用printf("%d",*z)语句打印就可以直接转化了,还是输入13 500000 6 输出结果1040975。如果要在pow(k,l)函数前面加上(int)得到效果与一般强制转化一样,在这儿得不到要求结果。 */ #include<stdio.h>
#include<math.h>
#include<stdlib.h>
void main(){
int r,m,y,*z;
double k,l;
z=(int *)malloc(sizeof(double));//分配一个double 类型的空间
scanf("%d%d%d",&r,&m,&y);
k=(double)(r+100)/100.0;
l=y/1.0;
*z=pow(k,l)*m;//math库函数,参数k、l 和返回值都是double类型
printf("%d\n",*z);
}