ZCMU-1179


我的错误:
明知道是大数问题但不是不想写数组或者字符串的结构。
思路
- 网上查阅后发现可以使用JAVA的大数类型做。
- 若不使用JAVA则就是整型数组或者字符串的情况。
- 将a^b结果放在数组当中,实时更新数组,每次用a去乘当前数组,记得加长。
- 因为上面情况得到的结果是倒序的不方便比较(通过比较来判断正负情况),所以还要倒过来。
- 最后模拟减法过程并输出结果。
其实代码可以简短一点的
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的更多相关文章
- BZOJ 1179 Atm 题解
BZOJ 1179 Atm 题解 SPFA Algorithm Tarjan Algorithm Description Input 第一行包含两个整数N.M.N表示路口的个数,M表示道路条数.接下来 ...
- 【BZOJ】1179: [Apio2009]Atm(tarjan+spfa)
http://www.lydsy.com/JudgeOnline/problem.php?id=1179 缩点建图... #include <cstdio> #include <cs ...
- poj 1179 Polygon
http://poj.org/problem?id=1179 Polygon Time Limit: 1000MS Memory Limit: 10000K Total Submissions: ...
- hihocoder #1179 : 永恒游戏 暴力
#1179 : 永恒游戏 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://hihocoder.com/problemset/problem/11 ...
- BZOJ 1179 [Apio2009]Atm(强连通分量)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1179 [题目大意] 给出一张有向带环点权图,给出一些终点,在路径中同一个点的点权只能累 ...
- BZOJ 1179: [Apio2009]Atm( tarjan + 最短路 )
对于一个强连通分量, 一定是整个走或者不走, 所以tarjan缩点然后跑dijkstra. ------------------------------------------------------ ...
- 九度OJ 1179 阶乘(模拟)
题目1179:阶乘 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4526 解决:1315 题目描写叙述: 输入n, 求y1=1!+3!+...m!(m是小于等于n的最大奇数) y2=2! ...
- 1179: [Apio2009]Atm
1179: [Apio2009]Atm Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 1629 Solved: 615[Submit][Status ...
- 51nod 1179 最大的最大公约数
1179 最大的最大公约数 题目来源: SGU 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 给出N个正整数,找出N个数两两之间最大公约数的最大值.例如:N = ...
- 1179: 零起点学算法86——小明A+B(未弄懂)
1179: 零起点学算法86——小明A+B Time Limit: 1 Sec Memory Limit: 32 MB 64bit IO Format: %lldSubmitted: 2540 ...
随机推荐
- 三牧校队训练题目 Solution
前置知识: 搜索 队列 栈 递归 (提高难度)记忆化搜索 T1:P1226 [模板]快速幂 暴力想法:\(a\times a\) 进行 \(b\) 次,每次 \(a\times a\mod p\). ...
- java 线程、进程及相关知识点 《笔记一》
一.线程.进程 线程,就是是进程的一个单位,程序最小执行单位. 进程,就是一个执行中的应用程序:由此可见,进程是由很多线程组成的: 线程生命周期,就是管杀也管埋的过程,生老病死: 线程的5个状态: 新 ...
- Response状态码
1.数据是否正常 2.文件是否存在 3.地址自动跳转 4.服务提供错误 注:容错处理识别 •-1xx:指示信息-表示请求已接收,继续处理. •-2xx:成功-表示请求已经被成功接收.理解.接受. •- ...
- Windows安装winget
打开GitHub链接地址:https://github.com/microsoft/winget-cli/releases 选择最新版本,点进去后 找到名为后缀名为 ".msixbundle ...
- linux内核调试痛点之函数参数抓捕记
1.linux内核调试工具crash并不能直接显示函数参数,而这个对调试又非常重要 下面是工作中一个实际的问题,我们的进程hang在如下一个内核栈中了,通过栈回溯可知是打开了一个nfs3的网盘文件或者 ...
- 树莓派2 CentOS7.9 环境下编译 ZLMediaKit 备忘录
查询系统架构 getconf LONG_BIT 查看是32 或 64位 arch uname -m 输出"x86_64"则为64位,输出"i686"或" ...
- springboot2.X动态修改log4j2日志级别
利用springboot提供的 spring-boot-starter-actuator 包可以实现动态修改log4j2日志级别的功能 添加依赖 添加依赖包 <dependency> &l ...
- Linux+PXE+DHCP+TFTP+NFS实现无人值守安装
一.实验环境:OS:Redhat6.4软件:DHCP服务.TFTP服务.NFS服务硬件:Dell R630服务器两台物理连接图: em1 em1 二.工作原理:服务器通过PXE网卡启动,从dhcp服务 ...
- CSP模拟 小 trick 总结 (持续施工中)
虽然这篇博客来的有点晚,但还是写了,欢迎dalao补充( (很杂,建议先浏览目录) 1.分块.莫队有关: \(\color{brown}(1)一个真正的回滚莫队(感谢\ Qyun\ 的讲解):\) $ ...
- PCI-5565反射内存卡
PCI-5565反射内存卡是一种用于实时网络的硬件设备.它基于反射内存网的原理,通过光纤连接多台计算机,形成网络节点,并且每个节点上的网络内存卡存储着其他节点的共享数据拷贝.该反射内存卡可以插在多种总 ...