一、水仙花数
所谓水仙花数是指一个三位数,其各位数字的立方和等于该数字本身。
比如153是一个水仙花数,因为153=1^3+5^3+3^3。
下列为1000以内的水仙花数:
#include<stdio.h>
int main(void)
{
int a;
for(int i=100;i<=999;i++){
int sum =0;
int temp =i;
for(int j=0;j<3;j++){
a=temp%10;
temp=temp/10;
sum+=a*a*a;
}
if(sum==i){
printf("%d ",i);
}
}
return 0;
}
![](https://img-blog.csdnimg.cn/img_convert/88da95a8c9ed43d63e70c5e7e00b7129.png)
二、寻找完数
一个数如果恰好等于它的因子之和,这个数就称为"完数"。
例如,6的因子为1、2、3,而6=1+2+3。
#include<stdio.h>
int main(void)
{
int sum;
for (int i = 2; i <= 1000; i++) {
sum = 0;
for (int j = 1; j <= i / 2; j++) {
if (i % j == 0) sum += j;
}
if (sum == i) {
sum = 0;//这里注意需要重新赋值sum
printf("%d=", i);
for (int j = 1; j <= i / 2; j++) {
if (i % j == 0) {
sum += j;
printf("%d", j);
if (sum != i)printf("+");
}
}
printf("\n");
}
}
return 0;
}
![](https://img-blog.csdnimg.cn/img_convert/ef7efc0c9703f1c8b645ba11fe9b8627.png)
三、求最大公约数和最小公倍数
1、辗转相除法
#include<stdio.h>
int main(void)
{
int m, n, max, min;
scanf("%d%d", &m, &n);
if (m < n) {
int temp;
temp = m; m = n; n = temp;//若m<n,将二者互换,保证m>n
}
if (m % n == 0)max = n;//如果直接能被整除如:8 2,最大公约数为2
else {
max = m % n;//如果不能被整除但有公约数如:8 6,最大公公约数为8%6=2
if (n% max != 0) max = n % max;//如果二者没有公约数,剔除掉有公约数6%2==0这类
} //剩下没有公约数n%max!=0的情况
min = m * n / max;
printf("最大公约数是:%d\n", max);
printf("最小公倍数是:%d\n", min);
return 0;
}
2、for循坏找出能同时被整除的最小自然数
#include<stdio.h>
int main(void)
{
int m, n, max=0, min;
scanf_s("%d%d", &m, &n);
if (m < n) {
int temp;
temp = m; m = n; n = temp;//若m<n,将二者互换,保证m>n
}
for (int i = 1; i<=n; i++) {
if (m % i == 0 && n % i == 0) max = i; //判断找出都能被整除的i(最大公约数)
}
min = m * n / max;//最小公倍数=m*n/最大公约数
printf("%d\n", max);
printf("%d", min);
return 0;
}
四、字符串中各类字符数的统计
输入一行字符,分别统计出其中英文字母、数字、空格和其他字符的个数。
#include<stdio.h>
int main(void)
{
char s;
int a = 0, b = 0, c = 0, d = 0;
// while(s = getchar() != '\n') 这是一开始写的错误代码
//在这一行中"s = getchar()”外层没有括号,"!="优先级大于“=”所以先运算" getchar() != '\n'
while ((s = getchar()) != '\n') //获取字符直到回车
{
if (s >= 'a' && s <= 'z' || s >= 'A' && s <= 'Z')
{
a++;
}
else if (s >='0' && s <= '9') {
b++;
}
else if (s == ' ') {
c++;
}
else d++;
}
printf("字母:%d\n数字:%d\n空格:%d\n其他字符:%d", a, b, c, d);
return 0;
}
![](https://img-blog.csdnimg.cn/img_convert/395c84d00dc02f22fd3fe7b9ead4463c.png)
五、求sn=a+aa+aaa+aaaa+...
键盘输入a,n,求sn=a+aa+aaa+aaaa+...的值。
#include<stdio.h>
int main(void)
{
int a, n,b=0,sn=0;
scanf("%d %d", &a, &n);
for (int i = 1; i <=n; i++) {
b =10*b+a; //如输入 5 3 sn=5+55+555
sn += b;
}
printf("%d", sn);
return 0;
}
![](https://img-blog.csdnimg.cn/img_convert/bdbddcc140a27489c8474775bde3bf99.png)