思路:和时间的换算相同,采用进制转化。
错误点:没有考虑不用找零钱的情况。
我的代码:
#include<stdio.h> #include<stdlib.h> struct money { int a; int b; int c;}; int main() { struct money m[3]; int i; int sum[4]; for(i=1;i<=2;i++) { scanf("%d.%d.%d",&m[i].a,&m[i].b,&m[i].c); sum[i]=m[i].a*17*29+m[i].b*29+m[i].c; } sum[3]=sum[2]-sum[1]; if(sum[3]>=0) { if(sum[3]==0) { printf("0.0.0"); } else printf("%d.%d.%d",abs(sum[3])/(17*29),abs(sum[3])/29%17,abs(sum[3])%29); } else { printf("-%ld.%ld.%ld",abs(sum[3])/(17*29),abs(sum[3])/29%17,abs(sum[3])%29); } return 0; }
优化:
不用结构体,直接设变量
采用另一种思路,直接换算:
#include <iostream> using namespace std; int main() { int a, b ,c, m, n, t, x, y, z; scanf("%d.%d.%d %d.%d.%d",&a, &b, &c, &m, &n, &t); if (a > m || (a == m && b > n) || (a == m && b == n && c > t)) { swap(a, m); swap(b, n); swap(c, t); printf("-"); } z = t < c ? t - c + 29 : t - c; n = t < c ? n - 1 : n; y = n < b ? n - b + 17 : n - b; x = n < b ? m - a - 1 : m - a; printf("%d.%d.%d", x, y, z); return 0; }