题目描述 使用栈将一个很长(>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!