C语言中强制转换问题

/* 首先声明这是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);
}

转载于:https://my.oschina.net/u/553126/blog/56274

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值