赞
踩
目录
问题描述
输入A、B,输出A+B。
输入格式
输入的第一行包括两个整数,由空格分隔,分别表示A、B。
输出格式
输出一行,包括一个整数,表示A+B的值。
样例输入
12 45
样例输出
57
数据规模与约定
-10000 <= A, B <= 10000。
示例代码
- #include<iostream>
- using namespace std;
- int main() {
- int a, b,c;
- cin >> a >>b;
- cout << a + b;
- }
问题描述
给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200
输入格式
第一行为一个整数n。
第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。
输出格式
输出一行,按从小到大的顺序输出排序后的数列。
样例输入
5
8 3 6 4 9
样例输出
3 4 6 8 9
示例代码
- #include <iostream>
- #include <algorithm>
-
- using namespace std;
-
- int main ()
- {
- int n,a[200];
- cin>>n;
- for(int i=0;i<n;i++)
- {
- cin>>a[i];
- }
- sort(a,a+n);
- for(int i=0;i<n;i++)
- {
- cout<<a[i]<<' ';
- }
- return 0;
- }
利用sort函数可以快速解决数组排序问题,对应的头文件为algorithm
sort函数的第一个参数为需要排序的数的首地址(不一定是数组首地址),第二个参数为末地址。
问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
提示
先将十六进制数转换成某进制数,再由某进制数转换成八进制
示例代码
- #include<iostream>
- using namespace std;
- struct Shiliu{
- int size ;
- string a;
- };
- int e[200][200000],f[200];
- int c[200][400000];
- struct Shiliu b[200];
- int shiliuzhuanint(char d) {
- int temp;
- switch (d) {
- case '0':temp = 0; break;
- case '1':temp = 1; break;
- case '2':temp = 2; break;
- case '3':temp = 3; break;
- case '4':temp = 4; break;
- case '5':temp = 5; break;
- case '6':temp = 6; break;
- case '7':temp = 7; break;
- case '8':temp = 8; break;
- case '9':temp = 9; break;
- case 'A':temp = 10; break;
- case 'B':temp = 11; break;
- case 'C':temp = 12; break;
- case 'D':temp = 13; break;
- case 'E':temp = 14; break;
- case 'F':temp = 15; break;
- }
- return temp;
- }
- void shiliuzhuaner(struct Shiliu b[200], int i, int c[200][400000]) {
- int temp;
- for (int j = 0; j < b[i].size; j++) {
- temp = shiliuzhuanint(b[i].a[j]);
- c[i][j * 4] = temp / 8;
- c[i][j * 4 + 1] = temp % 8 / 4;
- c[i][j * 4 + 2] = temp % 4 / 2;
- c[i][j * 4 + 3] = temp % 2;
- }
- }
- void erzhaunba(int c[200][400000],int e[200][200000],int i, struct Shiliu b[200],int f[200]) {
- int temp,res,temp1=1;
- temp = b[i].size * 4;
- res = temp % 3;
- temp /= 3;
- if (res != 0) {
- temp++;
- f[i] = temp;
- for (int j = 0; j <temp; j++) {
- if (j == 0) {
- if (res == 1) {
- e[i][j] = c[i][j] * 1;
- }
- if (res == 2) {
- e[i][j] = c[i][j] * 2 + c[i][j + 1] * 1;
- }
- }
- else {
- e[i][j] = c[i][(j - 1) * 3 + res] * 4 + c[i][(j - 1) * 3 + res + 1] * 2 + c[i][(j - 1) * 3 + res + 2] * 1;
- }
- }
- }
- else {
- f[i] = temp;
- for (int j = 0; j < temp; j++) {
- e[i][j] = c[i][j * 3 ] * 4 + c[i][j * 3 + 1] * 2 + c[i][j *3 + 2] * 1;
- }
- }
- }
- int main() {
- int n;
- cin >> n;
-
- for (int i = 0; i < n; i++) {
- cin >> b[i].a;
- b[i].size = b[i].a.length();
- }
-
- for (int i = 0; i < n; i++) {//十六进制转二进制已经完成
- shiliuzhuaner(b, i, c);
- }
-
- for (int i = 0; i < n; i++) {
- erzhaunba(c, e, i, b,f);
- }
- int flag = 1;
- for (int i = 0; i < n; i++) {
- flag = 1;
- for (int k = 0; k < f[i]; k++) {
- if (e[i][k] == 0 && flag == 1) {
-
- }
- else {
- cout << e[i][k];
- flag = 0;
- }
- }
- cout << endl;
- }
- return 0;
- }
变量:
结构体Shiliu的size表示该字符串的长度,a表示输入的字符串
数组c存储2进制,e存储八进制,f存储e的元素数目
函数:
shiliuzhuanint函数是把表示16进制数的字符转化为10进制整型数并返回
shiliuzhuaner函数是将16进制字符转化为2进制整型数并储存在数组c里,一个16进制数可以转变为4个二进制数
erzhuanba函数是将2进制转化为8进制,并存储八进制数的数目,假设输入n个字符串,则共4n个二进制数,而每个八进制数需要3个二进制数,此外应该从二进制数组的最后三个元素开始构成八进制数,从后往前,如果剩下的二进制数不足3个,从后往前,按乘1,2来计算
主函数中flag的作用是是否找到非0前导,如果找到,后续的0都能输出,否则没有一个0可以输出,当然无论如何非0的数都能输出。
至于为什么使用那么多全局变量,是因为全局变量占用的是堆,如果在主函数定义,就会占用栈,栈的空间不够用,但堆的地方够用
问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535
示例代码
- #include<iostream>
- using namespace std;
- int shiliuzhuanint(char d) {
- int temp=0;
- switch (d) {
- case '0':temp = 0; break;
- case '1':temp = 1; break;
- case '2':temp = 2; break;
- case '3':temp = 3; break;
- case '4':temp = 4; break;
- case '5':temp = 5; break;
- case '6':temp = 6; break;
- case '7':temp = 7; break;
- case '8':temp = 8; break;
- case '9':temp = 9; break;
- case 'A':temp = 10; break;
- case 'B':temp = 11; break;
- case 'C':temp = 12; break;
- case 'D':temp = 13; break;
- case 'E':temp = 14; break;
- case 'F':temp = 15; break;
- }
- return temp;
- }
- int main() {
- string a;
- cin >> a;
- int b, c[8];
- b = a.length();
- for (int i = 0; i < b; i++) {
- c[i] = shiliuzhuanint(a[i]);
- }
- unsigned long long int temp, res = 0;
- temp = 1;
- for (int i = b - 1; i >= 0; i--) {
- res = res + temp * c[i];
- temp =temp * 16;
- }
- cout << res;
- return 0;
- }
变量:
a是输入的十六进制字符串,b是存储十六进制字符串的长度,数组c用来存储a对应的每个位置上转变后的十进制数字 。
函数:
shiliuzhuanint函数就是将输入的十六进制字符转化为十进制。
主函数通过累加累乘,把十进制数组整合起来输出。
问题描述
十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制数的0至15。十六进制的计数方法是满16进1,所以十进制数16在十六进制中是10,而十进制的17在十六进制中是11,以此类推,十进制的30在十六进制中是1E。
给出一个非负整数,将它表示成十六进制的形式。
输入格式
输入包含一个非负整数a,表示要转换的数。0<=a<=2147483647
输出格式
输出这个整数的16进制表示
样例输入
30
样例输出
1E
示例代码
- #include<iostream>
- using namespace std;
- void shizhuanshiliu(unsigned long long int* d,char* temp) {
- switch (*d) {
- case 0:*temp='0'; break;
- case 1:*temp = '1'; break;
- case 2:*temp = '2'; break;
- case 3:*temp = '3'; break;
- case 4:*temp = '4'; break;
- case 5:*temp = '5'; break;
- case 6:*temp = '6'; break;
- case 7:*temp = '7'; break;
- case 8:*temp = '8'; break;
- case 9:*temp = '9'; break;
- case 10:*temp = 'A'; break;
- case 11:*temp = 'B'; break;
- case 12:*temp = 'C'; break;
- case 13:*temp = 'D'; break;
- case 14:*temp = 'E'; break;
- case 15:*temp = 'F'; break;
- }
- }
- int main() {
- unsigned long long int a;
- cin >> a;
- char c[100];
- unsigned long long int b[100], count=1, ans = 16;
- while (a / ans != 0) {
- count++;
- ans *= 16;
- }
- ans /= 16;
- for (int i = 0; i < count; i++) {
- b[i] = a / ans;
- shizhuanshiliu(&b[i], &c[i]);
- cout << c[i];
- a = a % ans;
- ans /= 16;
- }
- return 0;
- }
变量:
a是输入的十进制数字,b是存储十进制转化为十六进制的各个位置上的整型数字,数组c是存储b的字符形式
函数:
shizhuanshiliu函数是把十进制数转变为十六进制数
主函数的while循环是计算a转化为16进制数后的位数,for循环则是将16进制数整合10进制数相加,并输出
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。