一个个人定制的编程错题集
从1的阶乘累加到n的阶乘
//1!+2!+...+n!
#include <stdio.h>
int main(void)
{
int n,sum=0;
scanf("%d",&n);
for (int i=1; i<=n; i++)
{
int m=1;
for (int j=1; j<=i; j++)
{
m*=j;
}
sum+=m;
}
printf("%d\n",sum);
}
从1/(1!)累加到1/(n!)
#include <stdio.h>
int main(void)
{
double n,sum=0;
scanf("%lf",&n);
for (int i=1; i<=n; i++)
{
double m=1;
for (int j=1; j<=i; j++)
{
m*=j;
}
sum+=(1/m);
}
printf("%f\n",sum);
}
反置数
个整数的“反置数”指的是把该整数的每一位数字的顺序颠倒过来所得到的另一个整数。如果一个整数的末尾是以0结尾,那么在它的反置数当中,这些0就被省略掉了。
#include <stdio.h>
int Exchange(int x)
{
int n=0;
while (x)
{
n*=10;
n+=x%10;
x/=10;
} return n;
}
int main()
{
int n,m;
scanf("%d %d",&n,&m);
printf("%d\n",Exchange(Exchange(n)+Exchange(m)));
return 0;
}
数位分离
编写一个程序,输入一个1000 以内的正整数,然后把这个整数的每一位数字都分离出来,并逐一地显示。
#include <stdio.h>
#define N 100
int main()
{
int n,m,t=0,num[N]={0};
scanf("%d",&n);
while (n)
{
m=n%10;
n/=10;
num[t]=m;
t++;
}
for (int i=t-1; i>=0; i--)
{
printf("%d ",num[i]);
}
}
完数
一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1、2、3,而6=1+2+3,因此6就是“完数”。又如,28的因子为1、2、4、7、14,而28=1+2+4+7+14,因此28也是“完数”。编写一个程序,判断用户输入的一个数是否为“完数”。
#include <stdio.h>
int main()
{
int n,m=0;
scanf("%d",&n);
for (int i=1; i<n; i++)
{
if (n%i==0)
{
m+=i;
}
}
if (m==n)
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
水仙花数
#include <stdio.h>
int main()
{
int i=100,a,b,c;
for(;i<1000;i++)
{
a=i/100;
b=i%100/10;
c=i%10;
if(i==a*a*a+b*b*b+c*c*c)
printf("%d\n",i);
}
return 0;
}
回文数
#include<stdio.h>
int main()
{
int n,j,k,a[30];
int i = 0;
scanf("%d",&n);
while(n > 0)
{
a[i++] = n % 10;
n /= 10;
}
j = 0;
k = i - 1;
while(a[j] == a[k] && j <= i - 1)
//一一比对,注意:j<=i - 1是为了在位数范围内
{
j++;
k--;
}
if(j > i - 1) //有些类似判断素数的结构
puts("yes");
else
puts("no");
return 0;
}