- 博客(11)
- 收藏
- 关注
原创 分解质因数并统计个数——C语言实现
并更新num,无法除尽时再将除数加1后继续判定,直到num被更新为1时(例如“120 = 2 * 2 * 2 * 3 * 5 * 1”,当num被除为1时就分解成功了,但1不是素数所以不用统计)就分解成功了。一种十分死板的做法是将素数表列出,再根据素数表分解质因数,这种方法在面对一些特殊数据(分解中含有极大的质因数,例如“1237981 = 29 * 42689”)时可能出现问题。如120=2*2*2*3*5,共有5个质因数。可能有多组测试数据,每组测试数据的输入是一个正整数N,(1<N<10^9)。
2025-03-21 22:28:40
526
1
原创 首字母大写——C语言实现
我定义了一个大小为100的字符数组arr来存储输入。由于我们可能会多次判断空白符,故此处单独声明了一个Shikongbai(int)函数来判断操作的字符是否是空白符。将小写首字母改为大写时,既可以用。
2025-03-21 15:31:33
468
原创 寻找水仙花数——C语言实现
春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的:“水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=1^3+5^3+3^3。 现在要求输出所有在m和n范围内的水仙花数。输入数据有多组,每组占一行,包括两个整数m和n(100<=m<=n<=999)。对于每个测试实例,要求输出所有在给定范围内的水仙花数,就是说,输出的水仙花数必须大于等于m,并且小于等于n,如果有多个,则要求从小到大排列在一行内输出,之间用一个空格隔开;如果给定的范围内不存在水仙花数,则输
2025-03-12 23:38:49
357
原创 质数/素数判定——C语言实现
首先我们可以限制要判断的因数的范围。显然,一个数字A的一对因数一定有一方小于等于√A,因此我们只需从小于√A的部分开始判断即可。在C语言中遍历时,我们可以尽量少用sqrt函数来开根号,以减少函数的重复调用,提升程序性能。根据质数的定义,本题解法很简单:我们寻找输入数字的所有因数,一旦存在一个大于1且不是它本身的因数,输入就不是质数。给定一个数n,要求判断其是否为素数(0,1,负数都是非素数)。对于每组输入,若是素数则输出yes,否则输入no。质数,又叫做素数,是指在大于一的自然数中。
2025-01-16 00:58:59
470
原创 最简真分数——C语言实现
注意到题目要求的组合并不将颠倒顺序的组合视为两个组合,题目给出的数组单调递增且不含有重复数字,我们可据此特征编写如下代码。题目要求我们统计输入的数组中可以组成最简真分数的组合的个数。因此我们可以判断两个数的最大公因子是多少,并循环遍历整个数组,统计满足最大公因子为1的组合的个数。根据最简真分数的定义,我们知道本题的关键不在于判断两个数孰大孰小,而是在于他们之间。给出n个正整数,任取两个数分别作为分子和分母组成最简真分数,编程求共有几个这样的组合。每行输出最简真分数组合的个数。
2025-01-15 21:54:20
367
原创 求最小公倍数——C语言实现
设两个正整数A、B的最大公约数为R,最小公倍数为L。则有A = m*R,B = n*R。m与n必定互质,才能满足R就是A和B的最大公约数。所以必然有L = m*n*R。故A*B = L*R。正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。辗转相减法原本是用于求最大公约数。但如果我们知道下面这条定理就可以用最大公约数求出最小公倍数。数据范围:1≤a,b≤100000 1≤a,b≤100000。输出A和B的最小公倍数。输入两个正整数A和B。
2025-01-09 18:38:00
851
原创 求最大公约数——C语言实现
若余数不为零,则以所得余数为新的被除数C,以原来的除数C为新的被除数D,重复过程2。(X、Y、Z三者共同的最大公约数一定不大于其中任意两者X、Y之间的最大公约数,当r是Z的约数时可以取等号)由于最大公约数唯一,则必有r1=r2,证得(A,B)=(B,C)要求A和B间的最大公约数,可取A、B中较大者为被除数D,较小者为除数C。类似的,(X,Y,Z)表示X、Y、Z三者的最大公约数。,则有A = r1*m,B = r1*n,其中m和n为任意整数。,则有B = r2*x,C = r2*y,其中x和y为任意整数。
2025-01-09 00:54:02
1842
原创 M进制数转为N进制数——C语言实现
注意到题目给出的进制的范围为[2,36],这就暗示读者至少应该使用一个长整型存储中间的十进制以避免溢出。这一次题目要求我们将一个M进制数转换为N进制数,其中M和N为任给的位于区间[2,36]内的整数。我们首先将给出的M进制数A转换为十进制数B,再将十进制数B转换为N进制数C输出,最后的C即为所求。下面的一行输入一个数X,X是M进制的数,现在要求你将M进制的数X转换成N进制的数输出。注意输入时如有字母,则字母为大写,输出时如有字母,则字母为小写。将M进制的数X转换为N进制的数输出。输出X的N进制表示的数。
2025-01-08 21:06:16
308
原创 十六进制数转为十进制数——C语言实现
注意到题目给出的十六进制数是带有0x的前缀的,因此在稍后运算时需要略过前缀。同时注意到十六进制数中的符号包含0~9和A~F两部分,他们在ASCII码中的数值不是连贯的,我们需要分开处理。保险起见,此处读者还是要在gets()后加上空指针的判断。只要熟悉进制转换的知识,我们就知道本题仅需将给出的十六进制数的每一位数码乘以其对应的位权后求和,就自然得到其对应十进制数。写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串(注意可能存在的一个测试用例里的多组数据)。输入一个十六进制的数值字符串。
2025-01-04 02:18:34
1440
原创 十进制数转换为八进制数打印——C语言实现
本题与十进制数转换为二进制数这道经典题目可以说是一母同生。只要正确理解了十进制数转换为二进制数过程的本质,要我们将其转换为八进制数也只需要在代码上稍加修改即可,思路不变。若题目规定的输入整数N范围较大,读者需要想到题目在暗示我们可以使用一个长整型甚至是超长整型来存储转换的结果,不然就会报错。我们也可以用数组来存储求余结果并打印,思想和十进制数转换为二进制数完全一样,仅需修改几处参数。可能有多组测试数据,对于每组数据, 输出N的八进制表示数。输入一个整数,将其转换成八进制数输出。首先看到题目中规定的。
2025-01-02 22:21:54
634
原创 十进制数转换为二进制数打印——C语言实现
大家都知道,数据在计算机里中存储是以二进制的形式存储的。有一天,小明学了C语言之后,他想知道一个类型为unsigned int 类型的数字,存储在计算机中的二进制串是什么样子的。你能帮帮小明吗?并且,小明不想要二进制串中前面的没有意义的0串,即要去掉前导0。
2025-01-02 00:54:59
560
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅