首页 > 代码库 > oj---九度oj----大数---进制转换
oj---九度oj----大数---进制转换
struct bigInteger{ int digit[maxDigits]; int size; }
这里digit每一位的权重都乘以10000;
如果不是特别大的数,没必要;乘以10000后,把字符串转化为数字比较麻烦
#include<cstdio> #include<cstring> #define maxDigits 100 struct bigInteger{ int digit[maxDigits]; int size; void init(){ for(int i=0;i<maxDigits;i++) digit[i]=0; size = 0; } void set(int x){ init(); do{ digit[size++]=x%10000; x/=10000; }while(x!=0); } void output(){ for(int i=size-1;i>=0;i--){ if(i!=size-1) printf("04d",digit[i]); else printf("%d",digit[i]); } } bigInteger operator * (int x) const{ bigInteger ret; ret.init(); int carry=0; for(int i=0;i<size;i++){ int tmp=x*digit[i]+carry; carry=tmp/10000; ret.digit[ret.size++]=tmp%10000; } if(carry!=0) ret.digit[size++]=carry; return ret; } bigInteger operator + (const big Integer &A) const{ bigInteger ret; ret.init(); int carry=0; for(int i=0;i<A.size||i<size;i++){ int tmp=digit[i]+A.digit[i]+carry; carry=tmp/10000; ret.digit[ret.size++]=tmp%10000; } if(carry!=0) ret.digit[ret.size++]=carry; return ret; } bigInteger operator / (int x) const{ bigInteger ret; ret.init(); int r=0; //r<-->remainder for(int i=size-1;i>=0;i--){ int t=(r*10000+digit[i])/x; r=(r*10000+digit[i])%x; ret.digit[i]=t; } ret.size=0; for(int i=0;i<maxDigits;i++){ if(ret.digit[i]!=0) ret.size=i; } ret.size++; return ret; } }
oj---九度oj----大数---进制转换
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。