1037 在霍格沃茨找零钱
#include <iostream>
using namespace std;
int main()
{
int P[3], A[3];
scanf("%d.%d.%d %d.%d.%d", &P[0], &P[1], &P[2], &A[0], &A[1], &A[2]);
int R[3];
for (int i = 0; i < 3; i++)
R[i] = A[i] - P[i];
while (!(R[2] >= 0 && R[2] < 29))
{
if (R[2] >= 29)
{
R[2] -= 29;
R[1]++;
}
else if (R[2] < 0)
{
R[2] += 29;
R[1]--;
}
}
while (!(R[1] >= 0 && R[1] < 17))
{
if (R[1] >= 17)
{
R[1] -= 17;
R[0]++;
}
else if (R[1] < 0)
{
R[1] += 17;
R[0]--;
}
}
if (R[0] < 0)
{
R[0]++;
R[1] -= 17;
R[1]++;
R[2] -= 29;
}
if (R[0] < 0 || R[1] < 0 || R[2] < 0)
printf("-%d.%d.%d", abs(R[0]), abs(R[1]), abs(R[2]));
else
printf("%d.%d.%d", R[0], R[1], R[2]);
}
不能完美AC的答案, 原因可能为数据范围问题
#include <iostream>
using namespace std;
int main()
{
long long int P1, P2, P3, A1, A2, A3;
scanf("%lld.%lld.%lld %lld.%lld.%lld", &P1, &P2, &P3, &A1, &A2, &A3);
P3 = P1 * 17 * 29 + P2 * 29 + P3;
A3 = A1 * 17 * 29 + A2 * 29 + A3;
long long int difference = A3 - P3;
bool flag;
if (difference > 0)
flag = true;
else
flag = false;
difference = abs(difference);
long long int D1, D2, D3;
D3 = difference % 29;
D2 = difference / 29;
D1 = D2 / 17;
D2 = D2 % 17;
if (!flag)
cout << "-";
printf("%lld.%lld.%lld", D1, D2, D3);
}