您的位置:首页 > 其它

ACM题解报告——进制数取于余

2013-05-14 21:08 183 查看


这道题折磨了我好久,开始以为要把输入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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: