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; }