使用栈实现进制转换(高精度)

题目描述 使用栈将一个很长(>30)的十进制数转换为二进制数

这道题好像网上搜到的基本都不是高精度,可以直接取模的(没学会高精度除法之前这题我是真的不会啊ore),这题难点就在于会用数组模拟除法(对于大佬来说其实也不是难点qaq),最近把高精度除法给学了,顺便总结一下模板吧

//  核心代码
len = strlen(mid) ;   //计算那个很长的十进制的数的长度
		for( i = 0 ; i < len ; i++ ){
			num[i] = mid[len-1-i]-'0' ;
		}
		while( len ){
			t = 0 ;
			// 模拟除法的过程
			for( i = len-1 ; i >=0 ; --i ){
				t = t*10+num[i] ;
				num[i] = t/2 ;
				t = t%2 ;
			}
			//更新数组长度
			while( len && !num[len-1] )		len-- ;
			// 把对2取模的结果放入栈中
			ans.push(t) ;	
		}

学会了高精度除法之后,这题看起来就很简单了,下面是完整代码

#include<iostream>
#include<cstring>
#include<stack>
using namespace std ;
char num[1000] , mid[3000] ;
int main()
{
	int i , j , len , t ;
	stack<int>ans ;
	while( cin >> mid ){
		len = strlen(mid) ;
		for( i = 0 ; i < len ; i++ )	num[i] = mid[len-1-i]-'0' ;
		while( len ){
			t = 0 ;
			for( i = len-1 ; i >=0 ; --i ){
				t = t*10+num[i] ;
				num[i] = t/2 ;
				t = t%2 ;
			}
			while( len && !num[len-1] )		len-- ;
			ans.push(t) ;	
		}
		while( !ans.empty() ){
			cout << ans.top() ;
			ans.pop() ;
		}
		cout << endl ;
		memset( num , 0 , sizeof(num) ) ;
		memset( mid , 0 , sizeof(mid) ) ;
	}
	return 0 ;
}

大佬们都到处AK各种比赛了,我还在高精度这里爬ore
继续加油吧!up!up!up!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值