期末复习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