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