PTA |1037 在霍格沃茨找零钱 分数 20 金额值转化问题

221 阅读1分钟

PTA | 程序设计类实验辅助教学平台 (pintia.cn)

思路:

  • 转换成最小单位进行计算,最后进行单位还原。
  • 另外注意在换算成最小单位的过程中最大的极限值超出了整型范围。所以不能纯用int类型。
#include<iostream>
using namespace std;
#define int long long
signed main()
{
	int g2,s2,k2,g1,s1,k1;
	scanf("%lld.%lld.%lld",&g1,&s1,&k1);
	scanf("%lld.%lld.%lld",&g2,&s2,&k2);
	
	//全部转化为同一单位。
	 k1=g1*17*29+s1*29+k1;
	k2=g2*17*29+s2*29+k2;
	
	int sub;
	sub=k2-k1;
	

	if(sub<0)//说明是负数
	{
		sub=-sub;printf("-");
	}
	
		//再把sub转换为  Galleon.Sickle.Knut的格式
		int g,s,k;
		
		g=sub/(17*29);  //或 / (29*17)
		s=sub%(29*17)/29;
		k=sub%(29*17)%29;
		
		printf("%lld.%lld.%lld",g,s,k);
	
	return 0;
}