poj 2305 Basic remains

//在b进制下,求p%m,其中m, contains up to 9 digits,所以m是在int范围内
//把p和m转化为十进制数,而p边转化边模m,这样余数是以十进制来表示,再转化成b进制输出即可
#include <iostream>

#include <string>
using namespace std;
int main()
{
char s1[1002],s2[10];
int m,b;
while(scanf("%d",&b)&&b)
{
scanf("%s%s",s1,s2);
m=0;
int len1=strlen(s1),len2=strlen(s2);
for(int i=0;i<len2;++i)
m=m*b+s2[i]-'0';
__int64 res=0; //res有可能超int范围
for(int i=0;i<len1;++i)

{
res=res*b+s1[i]-'0';
res%=m;
}
int pos=0,ans[100];
do
{
ans[pos++]=res%b;
res/=b;
}while(res!=0); //用do{}while();语句是为了考虑整除的情况
for(int i=pos-1;i>=0;--i)

printf("%d",ans[i]);
printf("\n");
}
return 0;
}

posted on 2011-07-22 22:51  sysu_mjc  阅读(175)  评论(0编辑  收藏  举报

导航