早教吧 育儿知识 作业答案 考试题库 百科 知识分享

关于数中个位数发生位置变化已知一个正整数的个位数为7,将7移到该数的首位,其它数字顺序不变,则得到的新数恰好是原数的7倍,编程找出满足上述要求的最小自然数。

题目详情
关于数中个位数发生位置变化已知一个正整数的个位数为7,将7移到该数的首位,其它数字顺序不变,则得到的新数恰好是原数的7倍,编程找出满足上述要求的最小自然数。
▼优质解答
答案和解析
嗯,你的算法是没错的,不过最小值确实很大,超出计算机的64位字节长度,所以你那个算法也是算不出来的,楼上那位的算法也很好,不过由于精度问题,也是求不出来的。 其实这道题不能用暴力算法,穷举算,正确解法,应该是递推。因为还有很多条件没用上。比如只是把7从尾移到头而已,其余都没变,即是说: abcde7 * 7 ------- 7abcde 所以我们可以知道e,从而确定d,一直下去,直至a; 因此就有下面的程序,用数组保存结果: #include"stdio.h" int main() { int visit[100]; int k=1; visit[0]=7; int a,b,c;//a表示进数,b表示下一次的被乘数,c表示积。 c=9; a=4; do { b=c; c=(b*7+a)%10; a=(b*7+a)/10; visit[k]=b; k++; }while(!(c==7&&a==0));//退出条件,积为 7,而且进数为0; for(k--;k>=0;k--) printf("%d",visit[k]);printf("\n"); return 0; } 在VC编译成功,答案是:1014492753623188405797