思路:这就类似于模拟一遍竖式除法。
首先用1除以输入的数,比如31,1/31商0余1,最高位是0,然后用11来除31商0余11,此时余数*10+1相当于被除数后加了一个1,然后再用111/31,商3余18,输出3,继续类似方法,直到余数为0,商不为0时为止。
#include<cstdio>
int main()
{
int x;//除数
int s=0,n=0;//被除数,位数
scanf("%d",&x);
while(s<x)
{
s=s*10+1;//被除数末尾加一,直到不小于除数
n++;
}
while(1)
{
printf("%d",s/x);//进行除法运算输出商从高位输出
s%=x;//被除数更新为余数
if(s==0){//如果余数为0,则结束
break;
}
s=s*10+1;//余数末位加一
n++;//位数加一
}
printf(" %d\n",n);
}