sgu112
来源:互联网 发布:苹果笔记本装mac 编辑:程序博客网 时间:2024/06/05 12:02
SGU112 a^b-b^a
题目大意:
给你两个自然数a和b.求a^b-b^a.
输入
输入两个数 a 和 b (1≤a,b≤100).
输出
输出所求的答案.
样例输入
2 3
样例输出
-1
题目意思很好理解。
方法也很简单。
1.高精度乘法计算(大整数*大整数)。
2.套用快速幂(原理一样,即a^b=(a^(b/2))^2;(b为偶数)
a^b=(a^(b div 2))^2*a;(b为奇数)
注意事项:
1.高精度算法的正确性。
2.减法之前对符号的判断。
下面附上我的代码:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#define MAX(a,b) ((a)>(b)?(a):(b))#define MIN(a,b) ((a)<(b)?(a):(b))struct big{ int a[501];}num1,num2,ans,zero,one;int a,b;struct big count1(struct big a,struct big b) //大整数a*大整数b{ struct big re=zero; int i,j,l; for (i=1;i<=a.a[0];i++) for (j=1;j<=b.a[0];j++) { re.a[i+j-1]+=a.a[i]*b.a[j]; re.a[i+j]+=re.a[i+j-1]/10; re.a[i+j-1]%=10; } l=a.a[0]+b.a[0]; while (re.a[l]>=10) {re.a[l+1]+=re.a[l]/10;re.a[l]%=10;} if (re.a[l]==0) l--; re.a[0]=l; return re;}struct big count2(struct big a,int b) //大整数a*小整数b{ struct big re=zero; int i,j,l=a.a[0]; for (i=1;i<=l;i++) { re.a[i]+=a.a[i]*b; re.a[i+1]+=re.a[i]/10; re.a[i]%=10; } l++; while (re.a[l]>=10) { re.a[l+1]+=re.a[l]/10; re.a[l]%=10; l++;} while (re.a[l]==0) l--; re.a[0]=l; return re;}struct big dec(struct big a,struct big b) //计算大整数a-b{ struct big re=zero; int i,j,l=MAX(a.a[0],b.a[0]); for (i=1;i<=l;i++) { re.a[i]+=a.a[i]-b.a[i]; if (re.a[i]<0 && i!=l) { re.a[i]+=10; re.a[i+1]--; } } while (re.a[l]==0) l--; re.a[0]=l; return re;}struct big power(int a,int b) //快速幂a^b{ struct big re=one; if (b==0) return re; re=power(a,b/2); re=count1(re,re); if (b%2==0) return re; else return count2(re,a);}int compare(struct big a,struct big b) //比较大整数a、b{ int i; if (a.a[0]>b.a[0]) return 1; if (a.a[0]<b.a[0]) return 0; for (i=a.a[0];i>=1;i--) if (a.a[i]>b.a[i]) return 1; else if (a.a[i]<b.a[i]) return 0; return 1;}void init(){ int i; one.a[0]=one.a[1]=1; scanf("%d%d",&a,&b); num1=power(a,b); num2=power(b,a); if (compare(num1,num2)) //判断符号的输出 ans=dec(num1,num2); else { printf("-");ans=dec(num2,num1); } for (i=ans.a[0];i>=1;i--) printf("%d",ans.a[i]); printf("\n"); return ;}int main(){ init(); return 0;}
0 0
- SGU112
- sgu112
- SGU112
- sgu112
- SGU112 水题 Easy
- sgu112 高精度大整数乘方
- sgu112:a^b - b^a
- SGU112 a^b - b^a
- SGU112-a^b-b^a (BigNum)
- sgu112 高精度(用java水啊水)
- SGU 水题集合2 SGU112 SGU113 SGU114 SGU115
- 人品计算器
- iOS8 屏幕适配Size Classes
- 精选:局部变量、全局变量、堆、堆栈、静态和全局
- 内存管理
- Unity笔记
- sgu112
- Android学习系列(1)--为App签名(为apk签名)
- hdu 4734数位dp(记忆化搜索)
- spring mvc配置
- 蓝牙设置应用源码分析
- 第13周上机实践项目5——字符串操作(1)
- [开篇]C#静态变量调用及初始化
- Unity study 141125-1
- [java 基础]Eclipse下发布的应用在Tomcat服务器下的关联