含小数的任意进制转换

Background

Special for beginners, ^_^

Description

请你编一程序实现两种不同进制之间的数据转换。

Format

Input

每行三个数,第一个数表示需要转换的数的进制n(2≤n≤16),第二个数是一个n进制数,若n>10则用大写字母A-F表示数码10-15,并且该n进制数的长度不超过30位,第三个数也是一个正整数,表示转换之后的数的进制m(2≤m≤16)。

Output

转换后的n进制数,对于小数的转换,小数部分输出转换后的小数的前30个数字。

Samples

输入数据 1

16 FF 10
10 254 16
10 3.14 2

Copy

输出数据 1

255
FE
11.001000111101011100001010001111

Copy

Limitation

1s, 1024KiB for each test case.

思路:用while(cin)来输入三个参数,要转换的数和答案用string存储,遇到小数点在用别的变量转换,整数和小数先用__int128储存,后面再把两个数放到答案里.

Code

#include<bits/stdc++.h>
using namespace std;
int n,m,f;
__int128 a,b,d;
string s,ans,t="0123456789ABCDEF";
int main(){
	while(cin>>n>>s>>m){//输入数据
		ans="";
		a=b=f=0;
		d=1;
		for(auto r:s){
			if(r=='.'){
				f=1;
				continue;
			}
			if(f) b=b*n+t.find(r),d*=n;
			else a=a*n+t.find(r);
		}
		if(a) for(;a;ans=t[a%m]+ans,a/=m);//进制转换
		else ans="0";
		if(b){//判断小数
			ans+='.';
			for(int i=0;i<30;i++){
				cout<<t[b/d];
				b*=m,ans+=t[b/d],b%=d;
			}
			cout<<endl;
		}
		cout<<ans<<endl;
	}
	return 0;
}

注:auto要在ISO c++ 11的编译环境里使用!

如果不会调编译环境,可以打开 c++如何调编译环境_132564的博客-CSDN博客打开 “工具” ,点击 “编译器选项”打开以后,再点击 “生成代码/优化” ,然后打开 “代码生成”可以看到,c++默认是啥都没写的找到最后一行点击 \/ ,就能修改环境啦!注意:NOI比赛一般用的是c++ 11的环境!...https://blog.csdn.net/m0_60958303/article/details/123745023

来学习. 

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值