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

 

 
posted @ 2013-05-14 21:08  paradise in hell  Views(168)  Comments(0Edit  收藏  举报