我的错误:

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


思路

  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. Angular 18+ 高级教程 – Component 组件 の Template Binding Syntax

    前言 这篇介绍一些基本的 Angular 模板语法. 参考 Docs – Understanding binding Render.Event Listening and DOM Manipulati ...

  2. 图形化客户端工具——Navicat

    1.下载 下载地址:https://wwb.lanzoub.com/i4TuZ0g3okod   破解:     解压后有两个文件          先点击第一个文件依次安装     安装完成后    ...

  3. 暑假集训CSP提高模拟17

    \[暑假集训CSP提高模拟 \operatorname{EIJ}_{2}(6)-1 \] \(\operatorname{EIJ}_{k}(A)\) 定义为有 \(A\) 个球,\(k\) 个盒子,盒 ...

  4. USB 端点和管道的区别

    在USB体系架构中,经常会混用USB端点和USB管道的概念,包括本人也经常混用.但严格来说它们是两个不同的概念,具体表现在: 端点是USB设备端的概念,是真实的特理设备上的概念,其特性是通过端点描述符 ...

  5. icache的dcache区别

    iCache是指指令缓存,DCache是指数据缓存.iCache是专门用于存储指令的高速缓存,DCache是用于存储数据的高速缓存.iCache用于存储指令,在CPU执行时将指令从iCache中读取, ...

  6. window和Linux下安装nvidia的apex

    两种方法: 1.去github下下载apex,之后安装到你的python环境下,我的安装路径:E:\Anaconda\anaconda\envs\pytorch\Lib\site-packages 注 ...

  7. Teradata退出中国,您可以相信中国数据库!

    继Adobe.Tableau.Salesforce之后,2023年2月15日,数仓软件巨头Teradata宣布将逐步结束在中国的直接运营.数仓界的"黄埔军校"仓皇撤出中国市场给出的 ...

  8. BUUCTF BUU SQL COURSE 1

    方法一:手工注入 启动靶机 寻找注入点,使用burp抓包得到传参页面 得到注入点 /backend/content_detail.php?id=1 用and 1 =1 和 and 1 =2 判断存在s ...

  9. nicegui太香了,跨平台开发和跨平台运行--使用Python+nicegui实现系统布局界面的开发

    在现今国产化浪潮的驱动下,跨平台或者缩小范围说基于国产化Linux或者基于国产鸿蒙系统的开发才是未来的趋势了,风口浪尖上,我们开发人员也只能顺势而为,本篇随笔介绍在Python开发中,使用使用Pyth ...

  10. appium环境搭建及命令行启动sdk模拟器-附踩坑以及解决过程

    安装教程这里就不阐述了,网上一大堆教程,下载完成后安装然后配置对应的环境变量即可 android sdk及java home配置: path配置: %ANDROID_HOME%\platform-to ...