SGU112
题意:求a^b-b^a次,100以内。大数的-和*的模拟,用的模板,注意该模板中间和结果都不能出现负数。
- #include<iostream>
- #include<string>
- using namespace std;
- const int ten[4]={1,10,100,1000};
- const int maxl=1000;
- struct bignum
- {
- int d[maxl];
- bignum(string s)
- {
- int len=s.size();
- d[0]=(len-1)/4+1;
- int i,j,k;
- for(i=1;i<maxl;i++)d[i]=0;
- for(i=len-1;i>=0;i--)
- {
- j=(len-i-1)/4+1;
- k=(len-i-1)%4;
- d[j]+=ten[k]*(s[i]-'0');
- }
- while(d[0]>1&&d[d[0]]==0)--d[0];
- }
- bignum()
- {
- *this=bignum(string("0"));
- }
- string tostring()
- {
- string s("");
- int i,j,temp;
- for(i=3;i>=1;i--)if(d[d[0]]>=ten[i])break;
- temp=d[d[0]];
- for(j=i;j>=0;j--)
- {
- s=s+(char)(temp/ten[j]+'0');
- temp%=ten[j];
- }
- for(i=d[0]-1;i>0;i--)
- {
- temp=d[i];
- for(j=3;j>=0;--j)
- {
- s=s+(char)(temp/ten[j]+'0');
- temp%=ten[j];
- }
- }
- return s;
- }
- }zero("0"),d,temp,mid1[20];
- bool operator < (const bignum &a ,const bignum &b)
- {
- if(a.d[0]!=b.d[0])return a.d[0]<b.d[0];
- int i;
- for(i=a.d[0];i>0;i--)if(a.d[i]!=b.d[i])return a.d[i]<b.d[i];
- return 0;
- }
- bignum operator - (const bignum &a ,const bignum &b)
- {
- bignum c;
- c.d[0]=a.d[0];
- int i,x=0;
- for(i=1;i<=c.d[0];i++)
- {
- x=10000+a.d[i]-b.d[i]+x;
- c.d[i]=x%10000;
- x=x/10000-1;
- }
- while((c.d[0]>1)&&(c.d[c.d[0]]==0))--c.d[0];
- return c;
- }
- bignum operator *(const bignum &a,const bignum &b)
- {
- bignum c;
- c.d[0]=a.d[0]+b.d[0];
- int i,j,x;
- for(i=1;i<=a.d[0];i++)
- {
- x=0;
- for(j=1;j<=b.d[0];j++)
- {
- x=a.d[i]*b.d[j]+x+c.d[i+j-1];
- c.d[i+j-1]=x%10000;
- x/=10000;
- }
- c.d[i+b.d[0]]=x;
- }
- while((c.d[0]>1)&&(c.d[c.d[0]]==0))--c.d[0];
- return c;
- }
- string getstring(int a)
- {
- string ss;
- while(a!=0)
- {
- ss= char('0'+(a%10))+ss;
- a/=10;
- }
- return ss;
- }
- int main()
- {
- int aa,bb;
- cin>>aa>>bb;
- if(aa==bb)
- {
- cout<<0<<endl;
- return 0;
- }
- string ta=getstring(aa),tb=getstring(bb);
- bignum a(ta); bignum b(tb);
- // cout<<a.tostring();
- // cout<<b.tostring()<<endl;
- bignum ans1("1"),ans2("1");
- for(int i=0;i<bb;i++)
- {
- ans1=ans1*a;
- }
- // cout<<ans1.tostring()<<endl;
- for(int i=0;i<aa;i++)
- {
- ans2=ans2*b;
- }
- // cout<<ans2.tostring()<<endl;
- if(ans2<ans1)
- {
- bignum ans=ans1-ans2;
- cout<<ans.tostring()<<endl;
- }
- else
- {
- bignum ans=ans2-ans1;
- cout<<"-"<<ans.tostring()<<endl;
- }
- return 0;
- }
SGU112的更多相关文章
- SGU Volume 1
SGU 解题报告(持续更新中...Ctrl+A可看题目类型): SGU101.Domino(多米诺骨牌)------------★★★type:图 SGU102.Coprimes(互质的数) SGU1 ...
- 今日SGU 5.2
SGU123 题意:求和 收获:无 #include<bits/stdc++.h> #define de(x) cout<<#x<<"="< ...
随机推荐
- Spring框架 全注解annotation不使用配置文件(SpringConfiguration.java类代替) 补充 xml配置文件没有提示解决
全注解不使用配置文件 首先还是倒包 在原有的jar包: 需Spring压缩包中的四个核心JAR包 beans .context.core 和expression 下载地址: https://pan.b ...
- ios xmpp demo
为了方便程序调用,我们把XMPP的一些主要方法写在AppDelegate中 在AppDelegate.m下这几个方法为: [java] view plaincopy -(void)setupStrea ...
- C++系统学习之六:函数
1.函数基础 典型的函数定义包括:返回类型.函数名.由0个或多个形参组成的列表以及函数体. 2.参数传递 形参初始化的机理和变量初始化一样. 有两种方式:引用传递和值传递 2.1 传值参数 当形参是非 ...
- MySQL 上移/下移/置顶
在编写网站系统时,难免会用到上移.下移.置顶的功能,今天小编就介绍一下我的思路. 首先,需要一张数据表: CREATE TABLE `a` ( `id` ) NOT NULL AUTO_INCREME ...
- RN安卓原生模块
https://facebook.github.io/react-native/docs/native-modules-android.html RN实际就是依附在原生平台上,把各种各样的RN组件展示 ...
- 前端 MV*模式
https://github.com/livoras/blog/issues/11 MVC 调用关系如下: Controller(model) ,controller中执行业务逻辑,操作model V ...
- C++ 字符串分割,并把子字符串转换成int型整数
主要涉及到string类的两个函数find和substr: find()函数的用法: 原型:size_t find ( const string& str, size_t pos = 0 ) ...
- windows10系统下安装keras框架以theano为后端并配置gpu加速
在安装之前,请确保你的显卡是NVIDIA的,并且是以下型号,否则不能进行gpu加速,右键我的电脑--管理--设备管理器--显示适配器.另外如果你的电脑是windows7,安装教程也是一样的,不过根据k ...
- 【SaltStack】一些常用模块举例
一.用户和用户组模块 说明:该sls文件用来在Minion端创建nginx用户和nginx用户组,当创建nginx用户时,对nginx用户组是否已存在做判断! (1) /srv/salt/creat ...
- Oracle常用查询语句
"ORACLE数据字典视图的种类分别为:USER,ALL 和 DBA. USER_*:有关用户所拥有的对象信息,即用户自己创建的对象信息 ALL_*:有关用户可以访问的对象的信息,即用户自己 ...