FZU 2102Solve equation

来源:互联网 发布:2017世乒赛丁宁知乎 编辑:程序博客网 时间:2024/05/24 16:14

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;}
0 0