博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言中强制转换问题
阅读量:6955 次
发布时间:2019-06-27

本文共 1083 字,大约阅读时间需要 3 分钟。

hot3.png

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

你可能感兴趣的文章
sublime汉化步骤记录
查看>>
Java笔记02——多线程
查看>>
ubuntu下mysql无法启动Couldn't find MySQL server (/usr/bin/mysqld_safe)”
查看>>
sleep函数——Gevent源码分析
查看>>
学习周总结
查看>>
通用窗口类 Inventory Pro 2.1.2 Demo1(下)
查看>>
第零次作业
查看>>
在阿里云服务器windows server2012r iis上部署.net网站
查看>>
为easyui添加多条件验证
查看>>
Linux mem/swap/buffers/cached 区别
查看>>
13 memcache服务检查
查看>>
go install之后没有生成bin目录的原因(环境变量GOBIN)
查看>>
uva 10441(poj 2337 欧拉通路)
查看>>
DS博客作业07--查找
查看>>
Codeforces_733C
查看>>
[改善Java代码]动态加载不适合数组
查看>>
Mysql打开日志信息
查看>>
javaScript----Http对象封装
查看>>
Struts2入门
查看>>
纯JS,AJAX
查看>>