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

 
 
 
ACM题解报告——进制数取于余_第1张图片
 
  这道题折磨了我好久,开始以为要把输入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; }

 

 

你可能感兴趣的:(ACM)