7-19 支票面额

一个采购员去银行兑换一张yf分的支票,结果出纳员错给了fy分。采购员用去了n分之后才发觉有错,于是清点了余额尚有2y2f分,问改支票面额是多少?

输入格式

输入在一行中给出小于100的正整数n

输出格式

在一行中按格式y.f输出该支票的原始面额。如果无解,则输出No Solution

输入样例1

23

输出样例1

25.51

输入样例2

22

输出样例1

No Solution

分析与答案

100f+yn=100×(2y)+2f=200y+2f98f=199y+ny=(98fn)÷199

这道题的目的就是给出n求上述方程中y,f的整数解。如果用double来储存y,f,如何判断一个数是整数?使用y-(int)y==0,通过强制类型转换即可判断。下面的程序在f<=99范围内循环,判断y是不是整数,如果是整数就输出并结束程序,如果循环结束了,则说明无解,输出No Solution

#include <stdio.h>

int main(){
    int n, f = 0;
    double y = 0;
    scanf("%d",&n);
    while (f <= 99){
        y = (double) (98*f-n)/199;
        if (y >= 0 && y - (int)y == 0){
            printf("%d.%d",(int)y,f);
            return 0;
        }
        f++;
    }
    printf("No Solution");
    return 0;
}

7-19 测试点