思路:先将总钱(all)和要付的钱(pay)算出他们总的多少纳特,两个做差,小于零就用flag标记,然后取正,用除基取余法把差再转换成原进制数,根据flag输出,负的输出前加个符号就得了。
思路代码:
#include<cstdio>
int main() {
int n[3]={0};
int num=0,a1,b1,c1,a2,b2,c2,all,pay,remains=0,flag=0;
scanf("%d.%d.%d %d.%d.%d",&a1,&b1,&c1,&a2,&b2,&c2);
pay=(a1*17+b1)*29+c1;
all=(a2*17+b2)*29+c2;
remains=all-pay;
if(remains<0){
remains=-remains;
flag=1;
}
do{
if(num==0){
n[num++]=remains%29;
remains/=29;
}else if(num==1){
n[num++]=remains%17;
remains/=17;
}else if(num==2){
n[num++]=remains;
}
}while(num!=3);
if(flag==1){
printf("-%d.%d.%d",n[2],n[1],n[0]);
}else {
printf("%d.%d.%d",n[2],n[1],n[0]);
}
return 0;
}