C语言每日一练

您所在的位置:网站首页 能被3整除的数一定能被9整除对吗为什么 C语言每日一练

C语言每日一练

#C语言每日一练| 来源: 网络整理| 查看: 265

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