期末复习pta部分题解

这篇博客汇总了期末复习期间在PTS平台遇到的部分编程题,包括逆序的三位数、计算二进制中1的个数、厘米换算英尺英寸、整数四则运算等,涵盖了位操作、数学转换和基础算法的应用。通过实例解析解题思路和关键代码,帮助读者巩固编程基础。
摘要由CSDN通过智能技术生成

期末复习pta部分题解

下面根据分值进行

逆序的三位数

7-2 逆序的三位数 (10分)
程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。
输入格式:
每个测试是一个3位的正整数。
输出格式:
输出按位逆序的数。
输入样例:
123
输出样例:
321

实现逆序输出 由于是三位数可以分别求个十百位通过判断进行组合输出 这里我用了一个逆序输出的函数方便于逆序输出的使用

#include<iostream>
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int inverse(int n)
{
   
    int a=0;
    while(n)
    {
   
        a=a*10+n%10;// %10求得尾数 加尾数不断*10使其进位
        n/=10;// 除10 更新尾数
    }
    return a;
}
int main()
{
   
   int n,m;
   cin>>n;
   m=inverse(n);
   cout<<m;
}

位1的个数

7-32 位1的个数 (10分)
输入一个非负整数,求它变成二进制后1的个数(提示:用bin函数)。
输入格式:
输入一个正整数。
输出格式:
输出1的个数。
输入样例1:
在这里给出一组输入。例如:
37
输出样例1:
在这里给出相应的输出。例如:
3
输入样例2:
在这里给出一组输入。例如:
0
输出样例2:
在这里给出相应的输出。例如:
0

思路:用bin函数转化为2进制并存储 再进行统计1的个数

#include<stdio.h>
#include<string.h>
int main()
{
   
	char str[100000];
	int n;
	scanf("%d",&n);
	bin(n,str);
	return 0;
}
void bin(int n, char str[])
{
   
    int l=0,t=0;
        while(n>0)//不断对2取余转化为2进制
    {
   
        str[l]=n%2;
        l++;
        n/=2;
    }
    for(int i=l-1;i>=0;i--)
     {
   
        if(str[i]!=0)
        {
   
            t++;
        }
     }
    printf("%d",t);
}

突然想到了更简单的方法 由于只统计1的个数 所以n%2如果是1的话直接加上计数即可 就不用再存到数组里面再统计了

#include<stdio.h>
int bin(int n)
{
   
  int m;
  while(n)
  {
   
    m+=n%2;//如果是1 就直接记录次数了
    n/=2;
  }
  return m;
}
int main()
{
   
  int n;
  scanf("%d",&n);
  int m=bin(n);
  printf("%d",m);
  return 0;
}

厘米换算英尺英寸

7-3 厘米换算英尺英寸 (15分)
如果已知英制长度的英尺foot和英寸inch的值,那么对应的米是(foot+inch/12)×0.3048。现在,如果用户输入的是厘米数,那么对应英制长度的英尺和英寸是多少呢?别忘了1英尺等于12英寸。
输入格式:
输入在一行中给出1个正整数,单位是厘米。
输出格式:
在一行中输出这个厘米数对应英制长度的英尺和英寸的整数值,中间用空格分开。
输入样例:
170
输出样例:
5 6

理解公式读懂题意即可

int main()
{
   
    int foot,inch;
	int meter;
	scanf("%d",&meter);
	foot = meter/30.48;
	inch 
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值