高逐位相除(含详解)
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。
高逐位相除(含详解) #include using namespace std; int main() { int i,j,m,n,r,s; cin>>n; int a[n+1]={0}; m=1;//m:表示前i位能否被i整除(1表示能,0表示不能) i=1;//i表示位数,i=1表示前1位,i=5表示前5位 a[1]=1;//a[1]的取值是从1到9 while(a[1]<=9) { if(m&&i前i位可以被i整除时,看第i+1位 i++;
s=0;//s表示前i位的数为多少 for(j=1;j<=i;j++) { s=s*10+a[j];//计算前i位的和 s=s%i;//也是算前i位除以i的余数 }
//若将此句写在循环外面,则s会存储一个24位的数,内存不够 if(s!=0)//前i位不能被i整除 { m=0; a[i]++;//21不能被前两位整除时,试试22 while(a[i]>9&&i>1)//当29不能被前两位整除时,尝试30 { //i>1:当a[1]>9时,就说明没有这样的数,只能在第2-n位之间运算 a[i]=0; i--;//第i位已经遍历过1-9,换成第i-1位遍历 a[i]++;// } } else { m=1;//前i位可以被i整除 } if(m&&i==n) { for(j=1;j<=n;j++) cout<
}
cout<找到一个 a[i]++;//再对下一个进行遍历 } }
return 0;
本文来源:https://www.wddqw.com/doc/521fddb2f66527d3240c844769eae009591ba2ea.html