题目4.将一个正整数分解质因数。例如:输入90,打印出90=233*5。
解题思路:
对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数 k 恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
编码实现:
#include <stdio.h>
void main()
{
int n,i;
printf("\nplease input a number:\n");
scanf("%d",&n);
printf("%d=",n); // 10=
for(i=2;i<=n;i++)
{
while(n!=i)
{
if(n%i==0) //能被质数整除,将打印出这个质数,将商做为 新的n再循环处理。
{
printf("%d*",i); //2*5
n=n/i;
}
else
break;
}
}
printf("%d",n);
}
题目5.输入两个正整数m和n,求其最大公约数和最小公倍数。
解题思路:
最小公倍数 = num1 * num2 / 最小公约数;
最小公约数为:将num1 % num2 = b1(假设num1 大于等于 num2),再将num2%b1 = b2,直到余数为0,此时对应的b1则为最大公约数。
编码实现:
#include <stdio.h>
void main()
{
int a,b,num1,num2,temp;
printf("please input two numbers: eg : 5,25\n");
scanf("%d,%d",&num1,&num2);
/* 因为后面需要做求模运算,先判断一下两个数的大小 */
if(num1< num2)
{
temp = num1;
num1 = num2;
num2 = temp;
}
a=num1; //较大的数
b=num2; //较小的数
while(b!=0)/*利用辗除法,直到b为0为止*/
{
temp=a%b;
a=b;
b=temp;
}
printf("gongyueshu:%d\n",a);
printf("gongbeishu:%d\n",num1*num2/a);
}
题目6.输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
***解题思路:***对字符串进行遍历,将各个区间的标志进行累加计数。字符串的结束标志为’’\n",以及其他字符的判断区间(注意大小写)。
编码实现:
#include "stdio.h"
void main()
{
char c;
int letters=0,space=0,digit=0,others=0;
printf("please input some characters\n");
while((c=getchar())!='\n')
{
if(c>='a'&&c<='z'||c>='A'&&c<='Z')
letters++;
else if(c==' ')
space++;
else if(c>='0'&&c<='9')
digit++;
else
others++;
}
printf("all in all:char=%d space=%d digit=%d others=%d\n",letters,space,digit,others);
}