我也写了一个版本,一起探讨下:
/*
作者:李建国
版本:V1.0
版权:
*/
# include <stdio.h>
# include <stdlib.h>
struct A//定义数值与按位位和绑定的数据类型
{
int shuzhi;
int weisum;
};
int traversal(int, int);//遍历在给定范围内存在多少个满足条件的数,得到总和
bool is_prime(int);//判断十位是否为素数
int qiu_weihe(int);//各位求和
int main(void)
{
int num = 100;//给定起始界限
int i = 0;
int j;
int n;
struct A t;
n = traversal(100, 1000);
//printf("%d\n",n);
struct A * pArr = (struct A *)malloc(n*sizeof(struct A));//定义存放符合要求的数值及按位和
while(num<1000)//将符合要求的数值连同按位和存放到数组中
{
if (is_prime(num))
{
pArr[i].shuzhi = num;
pArr[i].weisum = qiu_weihe(num);
i++;
}
num++;
}
//sort
for (i=0; i<n-1; i++)//排序
{
for (j=0; j<n-1-i; j++)
{
if (pArr[j].weisum > pArr[j+1].weisum)
{
t = pArr[j];
pArr[j] = pArr[j+1];
pArr[j+1] = pArr[j];
}
}
}
//putout
printf("100-999之间所有十位为素数的数字按其各位数之和排列,由小到大的顺序如下:\n");
for (i=0; i<n; i++)//输出
{
printf("%d
",pArr[i].shuzhi);
}
return 0;
}
bool is_prime(int num)
{
int m;
int n;
m = num / 10;
n = m % 10;
if ((n==2)||(n==3)||(n==5)||(n==7))
return 1;
else
return 0;
}
int qiu_weihe(int num)
{
int m1;
int m2 = num;
int n = 0;
while (m2)
{
m1 = m2 % 10;
m2 /= 10;
n += m1;
}
return n;
}
int traversal(int m, int n)
{
int total = 0;
int i;
for (i=m; i<n+1; i++)
{
if (is_prime(i))
total++;
}
return total;
}
/*
在VC6.0中的输出结果是:
——————————————————————
120 121 122 ...
——————————————————————
总结:还可以增强一下交互性
*/