[求助]菜鸟碰到难题了
输入一个100以内的整数,求他的约数.用while循环做!如果输入数就为质数就显示该数,比如90=5*3*3*2.我的思路是把这个数除以该数-1就是n/(n-1),如果余数为0则取商,该数去除以商得出的数继续做n/(n-1)循环.直到n=2结束,再把所有的商打印出来,显示为90=5*3*3*2,如果余数不为0则循环.目前只有这点思路也不知道对不对,因为刚刚学,这题目感觉太复杂了代码表达不出来,望高手写一下代码,让我了解熟悉一下!!谢谢了!!
搜索更多相关的解决方案:
难题
----------------解决方案--------------------------------------------------------
搜索以前的帖子吧~~
----------------解决方案--------------------------------------------------------
这个和我出的那个1000以内数的质因子分解一样哦.
int i=2,flag=0;
while(i<=n)
{
if(n%i==0)//循环除去他的质因子.
{
if(flag==1)//输出格式
{
printf("*");
}
printf("%d",i);
n=n/i;
flag=1;
}
else
i++;
}
----------------解决方案--------------------------------------------------------
#include <stdio.h>
int Dec(int n,int i);
int Prime(int n);
int main(void){
int arr[10];
int i,j,n,m,flag,k=0;
for(i=0;i<10;i++)
arr[i]=1;
printf("输入数字:");
scanf("%d",&n);
m=n,i=2,j=1;
while((m!=1)&&(i!=10)){
flag=Dec(m,i);
if(flag!=0)
Dec(m,++i);
else{
m=m/i;
arr[j]*=i;
j++;
}
}
printf("%d=",n);
for(i=0;i<10;i++){
if(arr[i]!=1)
printf("%d*",arr[i]);
else
k++;
}
printf("\b");
if(k!=0)
printf("\b\b是个素数\n");
return 0;
}
int Dec(int n,int i){
if(n%i!=0)
return 1;
else
return 0;
}
----------------解决方案--------------------------------------------------------
/*找到了版主老大求质因数经典代码了,麻烦版主老大做个注释方便我们新手学习!谢谢!!*/
#include<stdio.h>
int main()
{
int n,i=2;
printf("请输入一个数子:");
scanf("%d",&n);
printf("%d=",n);
while(n!=1)
{
while(n%i==0)/*从2开始整除*/
{
if(n/i!=1)
printf("%d*",i);
else
printf("%d",i);
n=n/i;
}
i++;
}
printf("\n");
return(0);
}
----------------解决方案--------------------------------------------------------
要求一个数的质因子分解,首先要确定是他的约数,然后是质数.
这里在求约数时要循环除尽他的约数,有点想筛选法,你想,除过2(并且除尽2)了当然以后的偶数不会是此时n的约数了.
同理以后3 5 7 ..的质数都被除尽,而这些的指数的倍数都会跳过去了.
----------------解决方案--------------------------------------------------------