巴西歌手anitta:c程序 输入一个正整数,将它分解为质因数的乘积的形式输出,(例如输入:90 ,打印:90=2*3*3*5 )
不调用库或自定义函数,只用循环和数组实现,能在VC++6下编译:回答者程序有问题,输入90结果对了,另举几个数据进程序运行会出错!请检查
wchknudt的程序有问题。在判断某个质数能否被n整除时,忘记每次找到一个质因数后,应该将n除以该质因数。这样,n始终保持初始值,永远能被第一个质因数整除,循环无法停止。应该设一个辅助变量,初始值为n,循环中对该辅助变量进行操作即可。
#include <stdio.h>
#include <math.h>
#include <memory.h>
int flist[10000];
int factor[10000];
int cnt = 0;
//用最简单的方法,不用筛法了
int isPrime(int n)
{
int i;
for (i = 2; i <= sqrt(n*1.0); i++)
if (n % i == 0 )
return 0;
return 1;
}
int main()
{
int n,s;
scanf("%d", &n);
s=n;
memset(flist, 0, sizeof(int));
int i = 0;
for (i = 2; i <= sqrt(n*1.0); i++)
{
if ( s % i == 0)
{
if (isPrime(i) )
{
while (s % i == 0 )
{
flist[cnt]++;
factor[cnt] = i;
s/=i;
}
cnt++;
}
}
}
printf("%d=", n);
for(i = 0; i <cnt; i++)
{
int j;
for (j = 0; j < flist[i]; j++)
{
printf("%d", factor[i]);
if ( i == cnt-1 && j == flist[i] -1)
printf("\n");
else
printf("*");
}
}
}
#include <stdio.h>
#include <math.h>
#include <memory.h>
int flist[10000];
int factor[10000];
int cnt = 0;
//用最简单的方法,不用筛法了
int isPrime(int n)
{
int i;
for (i = 2; i <= sqrt(n*1.0); i++)
if (n % i == 0 )
return 0;
return 1;
}
int main()
{
int n;
scanf("%d", &n);
memset(flist, 0, sizeof(int));
int i = 0;
for (i = 2; i <= sqrt(n*1.0); i++)
{
if ( n % i == 0)
{
if (isPrime(i) )
{
while (n % i == 0 )
{
flist[cnt]++;
factor[cnt] = i;
}
cnt++;
}
}
}
printf("%d=", n);
for(i = 0; i <cnt; i++)
{
int j;
for (j = 0; j < flist[i]; j++)
{
printf("%d", factor[i]);
if ( i == cnt-1 && j == flist[i] -1)
printf("\n");
else
printf("*");
}
}
}
main()
{
int a,b,c,s;
a=2;
b=3;
c=5;
s=a*b*b*c;
printf("s=%d\n",s);
getch();
}