【#文档大全网# 导语】以下是®文档大全网的小编为您整理的《高逐位相除(含详解)》,欢迎阅读!
高逐位相除(含详解)
#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.wddqxz.cn/521fddb2f66527d3240c844769eae009591ba2ea.html