1037 在霍格沃茨找零钱 (20 分)
题目链接
算法分析
首先判断两个数的相对大小,保证第一个数比第二个数大,然后再对每一位进行对应相减,如果结果小于零,就向上借位。
代码实现
#include<bits/stdc++.h>
using namespace std;
#define N 5
int a[N], b[N], c[N];
int main(){
scanf("%d.%d.%d", &a[1], &a[2], &a[3]);
scanf("%d.%d.%d", &b[1], &b[2], &b[3]);
int x = a[1] * 10000 + a[2] * 100 + a[3];
int y = b[1] * 10000 + b[2] * 100 + b[3];
bool bl = 0;
if(x > y){
for(int i = 1; i <= 3; ++ i)
swap(a[i], b[i]);
bl = 1;
}
c[1] = b[1] - a[1];
if(b[2] >= a[2])
c[2] = b[2] - a[2];
else{
c[2] = b[2] - a[2] + 17;
c[1] --;
}
if(b[3] >= a[3])
c[3] = b[3] - a[3];
else{
c[3] = b[3] - a[3] + 29;
c[2] --;
if(c[2] < 0){
c[1] --;
c[2] += 17;
}
}
if(bl) printf("-");
printf("%d.%d.%d", c[1], c[2], c[3]);
return 0;
}