プログラムの問題
【質問】
年始めに年利r[%]でx円を借り入れ、年末にy円ずつ均等に返済するときの毎年の返済状況と、借入金完済時の返済総額sを求めるプログラム作成に関する質問です。なお、借入残高は年ごとの複利計算で行う。
また、借入金x円、毎年の返済金y円、年利r[%]はキーボードから入力するものとし、返済金y円は1年目の利息x * r/100円より大きいものとします。
【ヒント】1年目の年始借入残高zはx円です。 年末にはr[%]の利息が加算されるので、z1' = z1* (1 + r / 100)円となります。
ここでy円を返済するなら、2年目の年始借入残高は z2 = (z1' - y)円で、年末には、z2' = z2 * (1 + r / 100)円となる。
ここでy円を返済して3年目に入る、以下同様にしてx1nがy円以下になるまで繰り返す。z1nがy円以下になったとき、z1n円を返済して借入金完済となります。
【プログラム作成例】
借入金 返済金 年利を入力しなさい==>800000 120000 5.2
年数 = 1 返済金 = 120000 残高 = 721600 返済額 = 120000
年数 = 2 返済金 = 120000 残高 = 639123 返済額 = 240000
年数 = 3 返済金 = 120000 残高 = 552357 返済額 = 360000
年数 = 4 返済金 = 120000 残高 = 461079 返済額 = 480000
年数 = 5 返済金 = 120000 残高 = 365055 返済額 = 600000
年数 = 6 返済金 = 120000 残高 = 264037 返済額 = 720000
年数 = 7 返済金 = 120000 残高 = 157766 返済額 = 840000
年数 = 8 返済金 = 120000 残高 = 45969 返済額 = 960000
年数 = 9 最後の返済金 = 48359 返済総額 = 1008359
上記の解答は下記の通りなのですが、
下記以外の解答方法を教えてはいただけないでしょうか?
C言語に詳しい方よろしくお願いいたします。
#include <stdio.h>
main()
{
int n;
long x, y, z, s;
float r;
printf ("借入金 返済金 年利を入力しなさい==>");
scanf ("%ld %ld %f", &x, &y, &r);
n = 0;
s = 0;
z = x;
for(; ;) {
n++;
z = z * (1 + r / 100); /* n年末の借入残高 */
if (z <= y) break; /* 借入残高が返済金以下のとき
は繰り返しループを脱出 */
z -= y; /* n年末返済後の借入残高 */
s += y; /* 返済額を積算 */
printf ("年数 = %d 返済金 = %8ld 残金 = %8ld 返済額 = %8ld\n",n, y, z, s);
}
s += z; /* 最後の返済金を加算 */
printf("年数 = %d 最後の返済金 = %8ld 返済総額 = %10ld\n",n, z, s);
return (0);
}