马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 零的执行人 于 2020-5-20 17:55 编辑
有理数的显示
计算机中的实数其实是有理数,因为其小数点的位数是有限的,从这个意义上讲,计算机中的数值均为有理数(整数也是有理数)。编写程序,对从键盘上输入的若干个有理数,均按有理数的形式输出。 输入格式:每行一个有理数,以换行符表示结束,或为一个整数,或两个整数之商(整数,分号,整数间无空格),或为一个带小数点的实数(小数点后不超过4位小数)。测试数确保不会出现分母为零的情形。 输出格式:输出的有理数处于一对[]中,要求:若为零,输出为[0]; 若分母为1,输出为整数形式(只输出分子);分母必为正整数;分数形式的分子,分母必须没有公因子(即约过分的),但可以是假分数形式(分子可以大于分母)。 输入样例:
0.0
-125/ -5
12.4321
-666
输出样例:
[0]
[25]
[124321/10000]
[-666]
没有思路T T,求助大佬教学一下
本帖最后由 永恒的蓝色梦想 于 2020-5-21 12:57 编辑
如果满意,不妨给个最佳  - #define _CRT_SECURE_NO_WARNINGS
- #include<stdio.h>
- typedef long long ll;
- ll gcd(ll a, ll b) {
- ll t = 0;
- while (b) {
- t = a % b;
- a = b;
- b = t;
- }
- return a;
- }
- int main() {
- long long a, b, t, temp;
- for (;;) {
- scanf("%lld", &a);
- temp = getchar();
- if (temp == '\n') {
- printf("[%lld]\n", a);
- }
- else {
- if (temp == '/') {
- scanf("%lld", &b);
- }
- else if (temp == '.') {
- for (b = 1; (temp = getchar()) != '\n'; b *= 10) {
- a = temp - 48 + a * 10;
- }
- }
- if (a) {
- t = gcd(a, b);
- if (t == b) {
- printf("[%lld]\n", a / t);
- }
- else {
- printf("[%lld/%lld]\n", a / t, b / t);
- }
- }
- else {
- puts("[0]");
- }
- }
- }
- return 0;
- }
复制代码
|