C语言每日一练 |
您所在的位置:网站首页 › 能被3整除的数一定能被9整除对吗为什么 › C语言每日一练 |
C语言每日一练 2021年11月5日 文章目录 题目描述分析代码实现运行结果网上参考 题目描述判断一个素数能被几个9整除 分析素数怎么能被整除呢(A被B整除——A除以B余数为0),这些经典题目都好奇怪。几个九?9的N次方?还是理解为每位数都是9合理些。 关于素数的判断,已经在C语言每日一练——第2天:统计100以内所有素数的个数提及,这里就直接把函数拿来用了。 个人思路: 先输入一个数num,如果是素数,就继续,否则重新输入;然后用一个for循环判断“几个9”sum(各个位数都是9的数字)是否能被素数num整除(sum%num=0),如果满足条件,则打印这个sum,循环的次数由宏定义里的9的最大位数决定;进入下次循环前,还需要进行sum = sum * 10 + 9;的操作,即在原来的“几个9”上多加一个9。 代码实现 #include #include //2^64 = 18,446,744,073,709,551,616 #define MAX_NUMBER_OF_NINE 19 //最多几个9 /* * 判断是否为素数,是则返回1,否返回0 * */ int is_Prime(int num) { int i = 0; if(num int num = 0, i = 0; int cnt = 0; unsigned long long sum = 9; //被除数 do { printf("请输入一个素数\n"); scanf("%d", &num); }while(!is_Prime(num)); //不是素数,继续输入 for(i = 0; i cnt++; //满足条件的个数 printf("%d能整除%d个9 --- ", num, i + 1); //i+1个9 printf("%llu/%d=%llu\n", sum, num, sum / num); } sum = sum * 10 + 9; //继续加一个9 } if(cnt == 0) printf("%d不能整除%d位以内的“几个9”\n", num, MAX_NUMBER_OF_NINE); return 0; }运行结果 2,5 等素数不能整除“几个9”(9至264-1) 网上参考原文链接:https://www.runoob.com/cprogramming/c-exercise-example85.html 其实我就是按照这份代码的思路来写的。但好像2永远不可能整除“几个9”吧(9至264-1),那下面的程序不就卡住了? // Created by www.runoob.com on 15/11/9. // Copyright © 2015年 菜鸟教程. All rights reserved. // #include #include int main() { int p,i; long int sum=9; printf("请输入一个素数:\n"); scanf("%d",&p); for(i=1;;i++) if(sum%p==0)break; else sum=sum*10+9; printf("素数%d能整除%d个9组成的数%ld\n",p,i,sum); return 0; }错误示例:17个9都早就超过long int(long)类型的最大长度了,就算是64位编译器,long的最大有效数据也不超过2147483647(231 -1),即最大范围为999999999(“9个9”),何况下面这个数里只有一个9。 找别人错误这么认真,但是不太喜欢找自己的错误,嘿嘿 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |