PAT乙级(进制转换) 1022、1037

简介: PAT乙级(进制转换) 1022、1037

1022 D进制的A+B (20 分)

输入两个非负 10 进制整数 A 和 B (≤230−1),输出 A+B 的 D (1<D≤10)进制数。

输入格式:

输入在一行中依次给出 3 个整数 A、B 和 D。

输出格式:

输出 A+B 的 D 进制数。

输入样例:

123 456 8

输出样例:

1103

代码:

#include<stdio.h>
int main() {
    int i, d, a, b;//i用于控制遍历数组,d保存进制数,a和b分别保存被加数和加数
    int res[50] = { 0 };//申明一个数组转换后的每位的数字
    scanf("%d%d%d", &a, &b, &d);
    a += b;//得到总数
    if (a == 0) {//如果总数为0,输出0
        printf("0");
    }
    else {//如果总数不为0
        for (i = 0; a > 0; i++) {//得到每位数字
            res[i] = a % d;
            a /= d;
        }
        for (i -= 1; i >= 0; i--) {//输出每位数字
            printf("%d", res[i]);
        }
    }
    return 0;
}

1037 在霍格沃茨找零钱

如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统 —— 就如海格告诉哈利的:“十七个银西可(Sickle)兑一个加隆(Galleon),二十九个纳特(Knut)兑一个西可,很容易。现在,给定哈利应付的价钱 P 和他实付的钱 A,你的任务是写一个程序来计算他应该被找的零钱

输入格式:

输入在 1 行中分别给出 P 和 A,格式为 Galleon.Sickle.Knut,其间用 1 个空格分隔。这里 Galleon 是 [0, 107] 区间内的整数,Sickle 是 [0, 17) 区间内的整数,Knut 是 [0, 29) 区间内的整数。

输出格式:

在一行中用与输入同样的格式输出哈利应该被找的零钱。如果他没带够钱,那么输出的应该是负数。

输入样例 1:

10.16.27 14.1.28

输出样例 1:

3.2.1

输出样例 2:

14.1.28 10.16.27

输出样例 2:

-3.2.1

代码:

#include<stdio.h>
int transferKnut(int a, int b, int c) {//将钱全部转换为knut
    b = b + a * 17;
    c = c + b * 29;
    return c;
}
int result(int money, int* a, int* b, int* c) {//将实付的钱和应付的钱的差额转换
    int temp;
    *c = money % 29;
    temp = money / 29;
    *b = temp % 17;
    *a = temp / 17;
    return 0;
}
int main() {
    //带有1的是应付的钱,带有2的是实付的钱(也可以采用结构体的方式)
    int galleon1, sickle1, knut1, galleon2, sickle2, knut2;
    int money, pay;
    scanf("%d.%d.%d", &galleon1, &sickle1, &knut1);
    scanf("%d.%d.%d", &galleon2, &sickle2, &knut2);
    pay = transferKnut(galleon1, sickle1, knut1);//将应付的钱转换为Knut
    money = transferKnut(galleon2, sickle2, knut2);//将实付的钱转换为Knut
    if (money >= pay) {//实付大于等于应付
        money -= pay;//得到差额
        result(money, &galleon1, &sickle1, &knut1);//计算结果
        printf("%d.%d.%d", galleon1, sickle1, knut1);
    }
    else {//实付小于应付
        pay -= money;//得到差额
        result(pay, &galleon1, &sickle1, &knut1);//计算结果
        printf("-%d.%d.%d", galleon1, sickle1, knut1);
    }
    return 0;
}
相关文章
|
4月前
用人话教会你各个进制的意思和进制间的转化!!!
用人话教会你各个进制的意思和进制间的转化!!!
|
4月前
PAT乙级 1017大数除法
PAT乙级 1017大数除法
|
5月前
|
存储 C++
【软件设计师备考 专题 】数制基础:二进制、十进制和十六进制的理解与转换
【软件设计师备考 专题 】数制基础:二进制、十进制和十六进制的理解与转换
57 1
|
5月前
软考中级(软件设计)——十进制转十六进制的浮点数运算
软考中级(软件设计)——十进制转十六进制的浮点数运算
97 0
|
5月前
软考中级(软件设计)——十进制转八进制的浮点数运算
软考中级(软件设计)——十进制转八进制的浮点数运算
75 0
|
5月前
软考中级(软件设计)——十进制转二进制的浮点数运算
软考中级(软件设计)——十进制转二进制的浮点数运算
76 0
|
5月前
PAT甲级真题1050 字符串减法
PAT甲级真题1050 字符串减法
44 0
|
5月前
|
算法
PAT甲级真题1010 进制
PAT甲级真题1010 进制
49 0
|
数据采集 存储 数据挖掘
【每周一坑】罗马数字转换
由图可知,螺旋数组中的数字运动方向依次 右 -> 下 -> 左 -> 上 -> 右 这样的循环,在合适的条件下变换累加方向即可。
蓝桥杯基础训练】十六进制转八进制
给定n个十六进制正整数,输出它们对应的八进制数。
70 0