IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 22.01.07总结 -> 正文阅读

[C++知识库]22.01.07总结

今天天着实有点小冷,只做了一些题目

基本上是水题,挑几道略微不常规的题来复盘吧

内容不多,不设目录了

16进制转10进制

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;

double power(int);
string a;

int main()
{
    getline(cin,a);
    int len=a.length();
    double sum=0;
    int temp;
    for(int i=len-1, k=0;i>=0;i--,k++)
    {
        switch(a[i])
        {
        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;

        }
        sum+=temp*power(k);
    }
    printf("%.0lf",sum);

    return 0;
}
double power(int n)
{
    double sum=1;
    for(int i=1;i<=n;i++)
    {
        sum*=16;
    }
    return sum;
}


?这类型题一个可能坑点就是计算幂指会超时? 当然这题没有(在写这题的时候我想起来的)

一般来说自己写的pow函数会比自带的pow函数快,因为自带的可以计算浮点型的小数次方

而我们只需要求整数的就行了

01字串

我的思路: 之前做过一个题(Y老师的小镇),求一个数的二进制直接

while(num)
{
cout<<num%2;
num/=2;
}

?这样 得到的是其二进制的倒序

只要将其存入数组在倒序输出5个就是答案了

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int a[10];
int main()
{
   for(int i=0;i<32;i++)
   {
       int temp=i;
       int k=0;
       while(temp)
       {
          a[k++]=temp%2;
          temp/=2;

       }
       for(int j=4;j>=0;j--)
       {
           cout<<a[j];
       }
       cout<<endl;
   }
   
    return 0;
}

然后写完后去网上搜了搜

发现还有更优的解法(第二种)?

根据题目直接取巧,实际上也是模拟手算 /2? 再取余

16进制转8进制(100000位)

?

?

?

?

高精度的题目,始终是过不去的坎

尝试了将近一个小时,还是解决了(参考了)

结合之前的题目,自己写了一个16的pow函数计算10进制

再讲十进制num%???再*10扩位

最后取余输出(当没出现非零前? ?且取余为0时不输出0)

显示答案错误,应该是爆了或者超时了

以下是参考后的答案:

利用了字符串string的可加性

一个8进制数有3位二进制组成 所以保持3的倍数? 不够就补前置0

把前三位拿出来 如果都是0不要加? 不能输出

如果前三位是0? 则后面加起来就算是0也直接变成字符串加进去了 结束->输出? ?

为0的情况也能满足? 进制转换真神奇

#include<iostream>
#include<functional>
#include<algorithm>
#include<string>
#include<string.h>
#include<cstdio>
#include<cstdlib>
#include<cmath>
using namespace std;


int main()
{
	int n;
	int i, k;
	cin >> n;
	while(n--)
	{
		string op;
		string sixteen;
		string eight;
		cin >> sixteen;
		for ( i = 0; i < sixteen.length(); i++)
		{
			switch (sixteen[i])
			{
			case '0':
				op += "0000"; 
				break;
			case '1':
				op += "0001"; 
				break;
			case '2':
				op += "0010"; 
				break;
			case '3':
				op += "0011"; 
				break;
			case '4':
				op += "0100"; 
				break;
			case '5':
				op += "0101";
				break;
			case '6':
				op += "0110"; 
				break;
			case '7':
				op += "0111";
				break;
			case '8':
				op += "1000"; 
				break;
			case '9':
				op += "1001"; 
				break;
			case 'A':
				op += "1010"; 
				break;
			case 'B':
				op += "1011";
				break;
			case 'C':
				op += "1100";
				break;
			case 'D':
				op += "1101"; 
				break;
			case 'E':
				op += "1110"; 
				break;
			case 'F':
				op += "1111"; 
				break;
			}
		}
		if (op.length() % 3 == 1)
			op = "00" + op;
		if (op.length() % 3 == 2)
			op = "0" + op;
		if (op[0] !='0' ||  op[1] !='0' || op[2] != '0')
		{
			char temp;
			temp = (op[0] - '0') * 4 + (op[1] - '0') * 2 + op[2];
			eight += temp;
		}
		for ( i = 3; i < op.length(); i += 3)
		{
			eight += (op[i] - '0') * 4 + (op[i + 1] - '0') * 2 + op[i + 2];
		}
		cout << eight << endl;
	}
	return 0;
}

进制转换真神奇?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-01-08 13:48:12  更:2022-01-08 13:50:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:48:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码