经典算法4-6题

题目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);
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值