题目: 哈利波特货币体系,Galleon.Sickle.Knut ,计算A+B。其中Galleon 属于[0,107],Sickle 属于[0,17),Knut 属于[0,29) 输入格式: 每个输入文件包含一个测试用例,该测试用例占用一行标准格式的A和B,用一个空格隔开。 输出格式: 对于每个测试用例,您应该以与输入相同的格式在一行中输出A和B的总和。 输入样例:
3.2.1 10.16.27
输出样例:
14.1.28
AC代码: (解法1:位数进位)
#include<iostream>
using namespace std;
int main(){
int g1,g2,s1,s2,k1,k2;
scanf("%d.%d.%d %d.%d.%d",&g1,&s1,&k1,&g2,&s2,&k2);
int g,s,k,carry=0;
k=k1+k2;
if(k>=29){
carry=k/29;
k=k%29;
}
s=s1+s2+carry;
carry=0;
if(s>=17){
carry=s/17;
s=s%17;
}
g=g1+g2+carry;
printf("%d.%d.%d\n",g,s,k);
return 0;
}
AC代码: (解法2:化为最小单位计算)
#include<iostream>
using namespace std;
const int G=17*29;
const int S=29;
int main(){
long long a1,a2;
int b1,c1,b2,c2;
scanf("%ld.%d.%d %ld.%d.%d",&a1,&b1,&c1,&a2,&b2,&c2);
long long a=a1*G+b1*S+c1;
long long b=a2*G+b2*S+c2;
long long c=a+b;
if(c<0){
printf("-");
c=-c;
}
printf("%ld.%d.%d",c/G,c%G/S,c%S);
return 0;
}
|