自己练习 数学问题

/**
 *
 * 进制转换 习题6.4 王道P89
 */
#include <iostream>
#include <cstdio>
#include <string>
#include <vector>
using namespace std;
int CharToInt(char c){
    if(c>='0' && c<='9') return c-'0';
    else if(c>='a' && c<='z') return c-'a' + 10;
    else return c-'A' + 10;
}
char IntToChar(int x){
    if(x < 10) return x+'0';
    else return x-10+'A';
}
int main(){
    int m,n;
    string str;
//    while(scanf("%d %s %d",m,str,n) != EOF){ //语法错误 todo  不能用%s直接输入??
    while(cin>>m>>str>>n){
        long long number = 0;
        //m进制转换为10进制
        for(int i=0;i<str.size();++i){
            //cout<<"size:"<<str.size()<<endl;

            number *= m;
            number += CharToInt(str[i]);
        }
        //10进制转换为n进制
        vector<char> answer;
        while(number != 0){
            answer.push_back(IntToChar(number % n));
            number /= n;
        }
        for(int i=answer.size() - 1;i>=0;--i){
//            cout<<"size:"<<str.size()<<"elements:"<<answer[i]<<endl;
            printf("%c",answer[i]);
        }
        printf("\n");
    }

    return 0;
}



/**
 * 本地结果正确
 * 但是OJ超时  暂时不管
 * 习题6.2P69
 */
#include <iostream>
#include <cstdio>
#include <vector>

using namespace std;

int main(){
    int n;
//    long long a,b;
    int a,b;
    while (true){
        scanf("%d",&n);
        if(n == 0) break;
//        scanf("%lld%lld",&a,&b);
        scanf("%d%d",&a,&b);
        long number = a+b;


        vector<char> answer;
        while(number != 0){
            answer.push_back(number % n); //题干要求较松
            number /= n;
        }
        for(int i = answer.size()-1;i>=0;--i){
            printf("%d",answer[i]);
        }

        printf("\n");

    }
    return 0;
}


全部评论

相关推荐

迟缓的斜杠青年巴比Q了:简历被投过的公司卖出去了,我前两天遇到过更离谱的,打电话来问我有没有意向报班学Java学习,服了,还拿我学校一个学长在他们那报班学了之后干了华为OD当招牌
点赞 评论 收藏
分享
Rena1ssance_:对的,要是面评没太烂,勤更新简历等捞就行了,腾讯可以无限复活
点赞 评论 收藏
分享
强大的马里奥:我初中同学,没上高中,搞直播,现在提奔驰S450了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务