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 ...
随机推荐
- C# HttpClient 基本使用方式(一)
.NetCore主要提供了HttpWebRequest,WebClient,HttpClient这三种访问web的方式,其中HttpWebRequest,WebClient都在官方被标注为已过时,如果 ...
- 如何将图片转换为向量?(通过DashScope API调用)
本文介绍如何通过模型服务灵积DashScope将 图片转换为向量 ,并入库至向量检索服务DashVector中进行向量检索. 模型服务灵积DashScope,通过灵活.易用的模型API服务,让各种模态 ...
- EF Core – 乐观并发
前言 之前写过 EF Core 悲观并发, 这篇主要讲一下乐观并发. 乐观并发的机制可以看这篇. Why Need This? 如果你用 EF Core 做数据管理, 建议你每个 Entity 都配置 ...
- LeetCode题集-4 - 寻找两个有序数组的中位数,图文并茂,六种解法,万字讲解
题目:给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2.请你找出并返回这两个正序数组的 中位数 . 算法的时间复杂度应该为 O(log (m+n)) . 作为目前遇到 ...
- JAVAEE——maven安装
一.安装本地Maven 注意:检查JAVA_HOME环境变量, maven本身就是java写的,所以要求必须先安装JDK,检查本机jak环境win+r后输入cmd,然后输入java -version, ...
- Nuxt Kit 中的模板处理
title: Nuxt Kit 中的模板处理 date: 2024/9/20 updated: 2024/9/20 author: cmdragon excerpt: 摘要:本文详细介绍了在Nuxt ...
- thinkphp中的or,like,in等联合查询
数据库中的两个字段有一个字段等于查询条件时,下面两个方法都是可以的: (1) $where['a.goods_name|a.goods_sn'] = array('like',"%$keyW ...
- kotlin协程——>组合挂起函数
默认顺序调用 假设我们在不同的地⽅定义了两个进⾏某种调⽤远程服务或者进⾏计算的挂起函数.我们只假设它们都是有⽤的,但是实际上它们在这个⽰例中只是为了该⽬的⽽延迟了⼀秒钟: suspend fun do ...
- 没想到,Python 还可以制作 Web 可视化页面!
一谈到Web页面,可能大家首先想到就是HTML,CSS或JavaScript. 本次小F就给大家介绍一下如何用Python制作一个数据可视化网页,使用到的是Streamlit库. 轻松的将一个Exce ...
- Webpack热加载显示 'Cannot get /' 解决办法
安装webpack-dev-server后,用 npm 打包运行,打开后显示 'Cannot get /' : 需要在webpack.config.js的devServer中添加以下代码: 现在再次运 ...