http://acm.fzu.edu.cn/problem.php?pid=2102
一道看起来特别牛逼但是却很简单的题。给你一个等式A=K*B+d,给你A,B,C,C为当前进制数,让你求出满足等式的k与D.(k,d)
看似有进制转换跟着,但并不难,K为A/B(转换为10进制之后),d=A%B
之后就都懂了
。
#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <string.h>
#define Max 2188
#include <map>
using namespace std;
int convert(int scale,int x)
{
int sum=1;
for(int i=0;i<x;i++)
sum*=scale;
return sum;
}
int account(char a[],int suma,int scale)
{
for(int i=strlen(a)-1,j=0;i>=0;i--,j++)
{
if(a[i]>='0'&&a[i]<='9')
suma+=(a[i]-'0')*convert(scale,j);
else
{
switch(a[i])
{
case 'a':
suma+=10*convert(scale,j);
break;
case 'b':
suma+=11*convert(scale,j);
break;
case 'c':
suma+=12*convert(scale,j);
break;
case 'd':
suma+=13*convert(scale,j);
break;
case 'e':
suma+=14*convert(scale,j);
break;
case 'f':
suma+=15*convert(scale,j);
break;
}
}
}
return suma;
}
int main()
{
int t;
scanf("%d%*c",&t);
char a[34],b[34];
int scale;
while(t--)
{
scanf("%s %s %d",a,b,&scale);
int suma=0,sumb=0;
suma=account(a,suma,scale);
sumb=account(b,sumb,scale);
printf("(%d,%d)\n",suma/sumb,suma%sumb);
}
return 0;
}