当前位置: 首页 > news >正文

《算法笔记》3.5小节——入门模拟->进制转换

1022 D进制的A+B

在这里插入图片描述

#include <iostream>
using namespace std;
int maxn=32;

int main() {
    int z[maxn],num=0,a,b,d;
    cin>>a>>b>>d;
    int res=a+b;
    do{
        z[num++]=res%d;
        res=res/d;
    }while(res);
    for (int i = num-1; i >=0 ; i--) {
        cout<<z[i];
    }
    return 0;
}

问题 A: 又一版 A+B

在这里插入图片描述

#include <iostream>
using namespace std;

int main() {
    long long int  a,b,res;
    int m,z[100],num;
    while(cin>>m){
        if(m==0) break;
        cin>>a>>b;
        num=0;
        res=a+b;
        do{
            z[num++]=res%m;
            res=res/m;
        } while (res);
        for (int i = num-1; i >= 0; i--) {
            cout<<z[i];
        }
        cout<<endl;
    }
    return 0;
}

进制转换

在这里插入图片描述

  • long long int大概是10的19次方左右,但是题目中给的是10的三十次方,超过了long long int的范围,所以要手动模拟除法。
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int divideByTwo(string &num){
    int carry=0;//余数
    for (int i = 0; i < num.length(); ++i) {
        int digit=num[i]-'0';
        int val=carry*10+digit;
        num[i]=(val/2)+'0';
        carry=val%2;
    }
    return carry;
}

bool isZero(const string &num){
    for (char c:num) {
        if(c!='0') return false;
    }
    return true;
}

int main(){
    string num;
    while(cin>>num){
        if(num=="0"){
            cout<<'0'<<endl;
            continue;
        }
        string binary;
        while(!isZero(num)){
            int reminder= divideByTwo(num);
            binary.push_back(reminder+'0');

            int pos=num.find_first_not_of('0');
            if(pos!= string::npos){
                num=num.substr(pos);
            }else num="0";
        }
        reverse(binary.begin(),binary.end());
        cout<<binary<<endl;
    }
    return 0;
}

数制转换

  • 注意输入可能有字母,进制大于十的情况,要用数组存储数据

在这里插入图片描述

#include <iostream>
#include<algorithm>
using namespace std;
long long int other_to_ten(string s,int p){
    if(p==10) return stoll(s);
    long long res=0;
    for(char c:s){
        int digit;
        if(isdigit(c)){
            digit=c-'0';
        }else{
            digit= toupper(c)-'A'+10;
        }
        res=res*p+digit;
    }
    return res;
}

string ten_to_other(long long n,int p){
    if(p==10) return to_string(n);
    if(n==0) return "0";
    string res;
    while(n>0){
        int rem=n%p;
        char c=(rem<10)?('0'+rem):('A'+rem-10);
        res.push_back(c);
        n=n/p;
    }
    reverse(res.begin(),res.end());
    return res;
}

int main() {
    int a,b;
    string n;
    while(cin>>a>>n>>b){
        long long int res= other_to_ten(n,a);
        string ans= ten_to_other(res,b);
        cout<<ans<<endl;
    }
    return 0;
}

八进制

在这里插入图片描述

#include <iostream>
using namespace std;

int main() {
    long int n;
    while(cin>>n){
        int z[100],num=0;
        do{
            z[num++]=n%8;
            n=n/8;
        }while(n!=0);
        for (int i = num-1; i >= 0; --i) {
            cout<<z[i];
        }
        cout<<endl;
    }
    return 0;
}

相关文章:

  • Halo 设置 GitHub - OAuth2 认证指南
  • 【模拟电路】达林顿管
  • Linux--进程信号
  • windows安装docker随记
  • 【Git】--- 企业级开发流程
  • MacOS下下载和编译webrtc步骤
  • AI Agent入门指南
  • 使用Golang打包jar应用
  • CAS是什么,以及它在内存分配中的作用?线程在分配内存时为什么会发生竞争?预分配堆内存区域是如何解决这个问题的?
  • python求π近似值
  • 【速写】formatting_func与target_modules的细节(peft)
  • K8s是常用命令和解释
  • 【Hotspot虚拟机创建对象的过程是什么样的?】
  • Redis的分布式锁
  • [ABC400F] Happy Birthday! 3 题解
  • Web渗透之XSS注入
  • LeetCode 255 超通俗讲解:Swift 验证前序是否 BST
  • 【经济保护主义叙事】
  • QQ风格客服聊天窗口
  • 英国股票实时API 对比:iTick的差异化优势解析
  • 去菲律宾做it网站开发/seo工作室
  • 做商城网站需要办理什么/如何制作网站链接
  • 搜索引擎和浏览器/河南郑州网站推广优化外包
  • 福州专业做网站/百度的推广广告
  • 多语言企业网站源码/10常用的网络营销方法
  • 新乡市做网站的公司/网站开发流程