我的错误:

明知道是大数问题但不是不想写数组或者字符串的结构。


思路

  1. 网上查阅后发现可以使用JAVA的大数类型做。
  2. 若不使用JAVA则就是整型数组或者字符串的情况。
  3. 将a^b结果放在数组当中,实时更新数组,每次用a去乘当前数组,记得加长。
  4. 因为上面情况得到的结果是倒序的不方便比较(通过比较来判断正负情况),所以还要倒过来。
  5. 最后模拟减法过程并输出结果。

    其实代码可以简短一点的

C++代码(可减短,望各位提供简短代码)
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std; //计算a^b的结果
int pow(int sum[],int x,int n){
int i,j,k,temp,carry=0,lenth=1;
for(j=0;j<n;j++){
//表示每个数字都乘了,且最高位在后面
for(k=0;k<lenth;k++){
temp=sum[k]*x+carry;
sum[k]=temp%10;
carry=temp/10;
}
while(carry>0){
//这里先用后加,所以最后长度长1;
sum[lenth++]=carry%10;
carry/=10;
}
}
return lenth;
} //将结果倒过来
void swapp(int sum[],int lenth){
int j,temp;
for(j=0;j<lenth/2;j++){
temp=sum[j];
sum[j]=sum[lenth-1-j];
sum[lenth-1-j]=temp;
}
}
//将数组换成字符串了
void inttochar(char s1[],int num1[],char s2[],int num2[],int lenth1,int lenth2){
int j;
for(j=0;j<lenth1;j++){
s1[j]=num1[j]+'0';
}
s1[lenth1]='\0';
//这里是为了后面减法进行调整
for(j=1;j<=lenth2;j++){
s2[lenth1-j]=num2[lenth2-j]+'0';
}
for(j=0;j<lenth1-lenth2;j++){
s2[j]='0';
}
s2[lenth1]='\0';
}
void endd(char s1[],int num1[],char s2[],int num2[],int maxn,int result[]){
int j,judge=0;
//这里又将结果倒回去了
for(j=0;j<maxn;j++){
num1[j]=s1[maxn-j-1]-'0';
num2[j]=s2[maxn-j-1]-'0';
}
//模拟减法
for(j=0;j<maxn;j++){
if(num1[j]<num2[j]){
result[j]=num1[j]-num2[j]+10;
num1[j+1]--;
}else{
result[j]=num1[j]-num2[j];
}
}
for(j=maxn-1;j>=0;j--){
if(judge!=0||result[j]!=0){
judge++;
printf("%d",result[j]);
}
}
}
int main(){
int T;
scanf("%d",&T);
while(T--){
int a,b,maxn;
int na[30000]={1};
int nb[30000]={1};
int result[30000]={0};
char sa[30000];
char sb[30000];
scanf("%d%d",&a,&b); int lentha=pow(na,a,b);
int lenthb=pow(nb,b,a);
swapp(na,lentha);
swapp(nb,lenthb);
if(lentha>lenthb){
maxn=lentha;
inttochar(sa,na,sb,nb,lentha,lenthb);
}else{
maxn=lenthb;
inttochar(sb,nb,sa,na,lenthb,lentha);
}
int ret=strcmp(sa,sb);
if(ret>0){
endd(sa,na,sb,nb,maxn,result);
printf("\n");
}
else if(ret<0){
printf("-");
endd(sb,nb,sa,na,maxn,result);
printf("\n");
}else{
printf("0\n");
}
}
return 0;
}
JAVA代码
import java.util.*;
import java.math.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int a, b;
for(int i=0;i<n;i++){
while(sc.hasNext()){
a=sc.nextInt();
b=sc.nextInt();
System.out.println(BigInteger.valueOf(a).pow(b).subtract(BigInteger.valueOf(b).pow(a)));
}
}
}
}

ZCMU-1179的更多相关文章

  1. BZOJ 1179 Atm 题解

    BZOJ 1179 Atm 题解 SPFA Algorithm Tarjan Algorithm Description Input 第一行包含两个整数N.M.N表示路口的个数,M表示道路条数.接下来 ...

  2. 【BZOJ】1179: [Apio2009]Atm(tarjan+spfa)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1179 缩点建图... #include <cstdio> #include <cs ...

  3. poj 1179 Polygon

    http://poj.org/problem?id=1179 Polygon Time Limit: 1000MS   Memory Limit: 10000K Total Submissions:  ...

  4. hihocoder #1179 : 永恒游戏 暴力

    #1179 : 永恒游戏 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://hihocoder.com/problemset/problem/11 ...

  5. BZOJ 1179 [Apio2009]Atm(强连通分量)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1179 [题目大意] 给出一张有向带环点权图,给出一些终点,在路径中同一个点的点权只能累 ...

  6. BZOJ 1179: [Apio2009]Atm( tarjan + 最短路 )

    对于一个强连通分量, 一定是整个走或者不走, 所以tarjan缩点然后跑dijkstra. ------------------------------------------------------ ...

  7. 九度OJ 1179 阶乘(模拟)

    题目1179:阶乘 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4526 解决:1315 题目描写叙述: 输入n, 求y1=1!+3!+...m!(m是小于等于n的最大奇数) y2=2! ...

  8. 1179: [Apio2009]Atm

    1179: [Apio2009]Atm Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 1629  Solved: 615[Submit][Status ...

  9. 51nod 1179 最大的最大公约数

    1179 最大的最大公约数 题目来源: SGU 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 给出N个正整数,找出N个数两两之间最大公约数的最大值.例如:N = ...

  10. 1179: 零起点学算法86——小明A+B(未弄懂)

    1179: 零起点学算法86——小明A+B Time Limit: 1 Sec  Memory Limit: 32 MB   64bit IO Format: %lldSubmitted: 2540  ...

随机推荐

  1. 三牧校队训练题目 Solution

    前置知识: 搜索 队列 栈 递归 (提高难度)记忆化搜索 T1:P1226 [模板]快速幂 暴力想法:\(a\times a\) 进行 \(b\) 次,每次 \(a\times a\mod p\)​. ...

  2. java 线程、进程及相关知识点 《笔记一》

    一.线程.进程 线程,就是是进程的一个单位,程序最小执行单位. 进程,就是一个执行中的应用程序:由此可见,进程是由很多线程组成的: 线程生命周期,就是管杀也管埋的过程,生老病死: 线程的5个状态: 新 ...

  3. Response状态码

    1.数据是否正常 2.文件是否存在 3.地址自动跳转 4.服务提供错误 注:容错处理识别 •-1xx:指示信息-表示请求已接收,继续处理. •-2xx:成功-表示请求已经被成功接收.理解.接受. •- ...

  4. Windows安装winget

    打开GitHub链接地址:https://github.com/microsoft/winget-cli/releases 选择最新版本,点进去后 找到名为后缀名为 ".msixbundle ...

  5. linux内核调试痛点之函数参数抓捕记

    1.linux内核调试工具crash并不能直接显示函数参数,而这个对调试又非常重要 下面是工作中一个实际的问题,我们的进程hang在如下一个内核栈中了,通过栈回溯可知是打开了一个nfs3的网盘文件或者 ...

  6. 树莓派2 CentOS7.9 环境下编译 ZLMediaKit 备忘录

    查询系统架构 getconf LONG_BIT 查看是32 或 64位 arch uname -m 输出"x86_64"则为64位,输出"i686"或" ...

  7. springboot2.X动态修改log4j2日志级别

    利用springboot提供的 spring-boot-starter-actuator 包可以实现动态修改log4j2日志级别的功能 添加依赖 添加依赖包 <dependency> &l ...

  8. Linux+PXE+DHCP+TFTP+NFS实现无人值守安装

    一.实验环境:OS:Redhat6.4软件:DHCP服务.TFTP服务.NFS服务硬件:Dell R630服务器两台物理连接图: em1 em1 二.工作原理:服务器通过PXE网卡启动,从dhcp服务 ...

  9. CSP模拟 小 trick 总结 (持续施工中)

    虽然这篇博客来的有点晚,但还是写了,欢迎dalao补充( (很杂,建议先浏览目录) 1.分块.莫队有关: \(\color{brown}(1)一个真正的回滚莫队(感谢\ Qyun\ 的讲解):\) $ ...

  10. PCI-5565反射内存卡

    PCI-5565反射内存卡是一种用于实时网络的硬件设备.它基于反射内存网的原理,通过光纤连接多台计算机,形成网络节点,并且每个节点上的网络内存卡存储着其他节点的共享数据拷贝.该反射内存卡可以插在多种总 ...