ACM题解报告——进制数取于余
这道题折磨了我好久,开始以为要把输入X进制串转换为十进制串,然后对十进制串进行逐位取余,但是由于X进制串的位数会非常大,没有想到好的转换算法,这里我是对X进制串进行逐位取余,这样就不会受其位数的影响了,代码也比较简单,涉及到的一个常用的公式就是(a+b)%c=[(a%c)+(b%c)]%c.
代码如下:
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int main( )
{
int t,b,sum,len,i;
char a[105];
cin>>t;
while(t--)
{
sum=0;
cin>>b>>a;
len=strlen(a);//计算a字符串长度
for(i=0;i<len;i++)//核心
{
sum+=(a[i]-'0')*b;//将最高位的X进制数转化为十进制
sum*=b;//左移一位
sum%=( b+1);//逐位取余
}
cout<<sum<<endl;
}
return 0;
}