在数学里有个基本定理:任意一个大于1的合数都可以分解成有限个素数(质数)的乘积,且分解是唯一的。证明挺麻烦,但是我们可以用计算机来验证。请你来试一试!
Input
输入若干合数(>2),输入0表示输入结束。
Output
对于每个有效的正整数输入,输出其分解为若干个素数乘积的表达式,表达式因子按升序(从小到大)输出。
首先,值得肯定的是你的想法很巧妙,但是实现起来可能会有些困难。
对于为什么程序一运行就直接结束的问题,是因为代码中对二维数组 a 的定义,
a[1000][1000]真的是太大了,直接就退出了啊,不妨试试a[100][100];
或者利用malloc()函数来进行动态空间的分配,如果不了解malloc()函数的话欢迎去看看我写的一篇关于malloc()函数的博客哦 嘿嘿嘿
我大概看了一下下面的代码,
while()语句的判断条件有点儿不合理,scanf()函数返回的值是成功读取的值的个数,
另外while()括号中的scanf()语句为啥没有指明赋值给谁呢,要注意了哦,这种小毛病往往是最致命的
下面进行值的交换的时候有点小问题哦
应该是
if(a[i][y]>a[i][y+1])
{
tame=a[i][y];
a[i][y]=a[i][y+1];
a[i][y+1]=tame;
}
这个以后要多加注意,可以画成个三角,非常容易理解
剩下的代码找bug就依靠你自己了噢,慢慢来,找bug是一件很“快乐的事”,哈哈哈哈
说实话,找bug最快的方式还是代码编写者自己查找,加油吧
马上期末考试了哦,加油加油
数组定义太大了,内存溢出,把a[1000][1000]改成全局变量
#include <stdio.h>
int main()
{
int n, i, k;
while (scanf("%d", &n) == 1 && n != 0){ //输入 0 结束
i = 2; k = 0;
while (n != 1)
{
if (n % i == 0)
{
if(k==0) printf("%d = ",n);
printf(k++ == 0 ? "%d" : "*%d",i);
n /= i;
}
else {
i++;
}
}
printf("\n");
}
return 0;
}
while()这里的scanf没指定读入数值写到哪里