Chinaunix首页 | 论坛 | 博客
  • 博客访问: 464017
  • 博文数量: 68
  • 博客积分: 2606
  • 博客等级: 上尉
  • 技术积分: 1308
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-13 23:01
文章分类
文章存档

2012年(6)

2011年(62)

分类: C/C++

2011-10-27 14:53:11

------------------------------------------
本文为本人原创,欢迎转载!
转载请注明出处:snowboy.blog.chinaunix.net
雪夜流星
------------------------------------------
题目:给定一个整数,将其分解为质因数的乘积,如输入90,输出“90=2*3*3*5”。(质因数的数目最多为10个)。

思路:输入一个数n,将2.......d(d为n每次分解后所得的值,初始值为n)的所有数都按下面的操作遍历一遍,先判断该数是否为素数,若为素数,则判断该数是否能被d整除,若能整除则一直整除,并把该素数放入临时数组中,更新d的值;否则,进行下一次循环。

代码实现:
#include
#include

int main(void)
{
int d = 0;
int tmp = 0;
int i = 0;
int j = 0;
int k = 0;
int a[10] = {0};

printf("please input a data:");
scanf("%d", &d);
tmp = d;
/*遍历2到d中的所有数,先判断该数是否为素数,再判断该数是否为
 d的因数,两个条件满足则将其存入数组中;否则进行下一次循环*/
for (i=2; i<=d; i++)
{
/*判断该数是否为素数,若非素数则进行下一次循环*/
for (j=2; j
{
if (i % j == 0)
{
break;
}
}

/*判断i是否为d的因数,如果是则将i存入临时数组,并更新d的值,
                 此处用while是为了满足一个整数中有几个相同的因数的情况*/
while (d % i == 0)
{
a[k++] = i;
d = d/i;
}
}
/*分三段将该数组打印到终端*/
printf("%d=", tmp);
for (i=0; i
{
printf("%d*", a[i]);
}
printf("%d\n", a[k-1]);

return 0;
}
阅读(7409) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~