http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19088
给定一个数的进制k,和第一个乘数的最低位n,和第二个乘数m,求原数的最小长度。
乘法规律:xxxx7 × 4= 7xxxxx.
首先n是原数的最低位,那么n*m%k就是原数的倒数第二位,也就是后一个数的最后一位,那么依次类推,可以把后一个数全部推出来,直到乘数加进位等于n,结束。
#include<cstdio>
int main()
{
//freopen("a.txt","r",stdin);
int k,n,m,i,a,b,c,ans;
while(~scanf("%d%d%d",&k,&n,&m))
{
ans=1,c=0; //ans计数,c是进位
a=n;
while(1)
{
if(a*m+c==n) break; //如果 乘数+进位等于n结束
b=(c+a*m)%k; //算下一位
c=(c+a*m)/k; //下一个进位
a=b;
// printf("%d %d\n",a,c);
ans++;
}
printf("%d\n",ans);
}
return 0;
}