Alternative Scale of Notation(大数java)
来源:互联网 发布:疯狂美工助手打不开 编辑:程序博客网 时间:2024/06/05 06:27
Link:http://poj.org/problem?id=1894
Problem:
Description
For example, U3(1001) = 1*27 + 0*9 + 0*3 + 1*1 = 28.
However, this correspondence has one major drawback: it is not ont-to-one. For example,
28 = U3(1001) = U3(01001) = U3(001001) = ... ,
infinitely many strings map to the number 28.
In mathematical logic and computer science this may be unacceptable. To overcome this problem, the alternative interpretation is used. Let us interpret characters as digits, but in a slightly different way: C1 = 1, C2 = 2, . . . , CB = B . Note that now we do not have 0 digit, but rather we have a rudiment B digit. Now we define the map VB in a similar way, for each string α[ 1...n ] of length n we put
For an empty string ε we put VB(ε) = 0.
This map looks very much like UB , however, the set of digits is now different. So, for example, we have V3(1313) = 1*27 + 3*9 + 1*3 + 3*1 = 60.
It can be easily proved that the correspondence defined by this map is one-to-one and onto. Such a map is called bijective, and it is well known that every bijective map has an inverse. Your task in this problem is to compute the inverse for the map VB . That is, for a given integer number x you have to find the string α, such that VB(α) = x.
Input
Output
Sample Input
360
Sample Output
1313
Source
其实思路很简单:
对于U串[Un, Un-1, Un-2, ..., U1]其对应的V串是[Un + 1, Un-1 + 1, Un-2 + 1,..., U1 + 1]即在每一个U串元素的基础上+1
那么U串的X值和V串的X值是什么关系呢? xV = Bn * (Un + 1) + Bn-1 * (Un-1 + 1) + Bn-2 * (Un-2 + 1) +... + B1 * (U1 + 1)
其中Bn = base ^ (n - 1). 则xV = xU + Bn + Bn-1 + Bn-2 + ... + B1,所以可以基于以下步骤通过间接求U串来求解V串:
1)将输入x迭代减去bi,当bi > x时退出,此时剩下的x为U的x值,并记录下迭代的步骤len,len即为V串的长度
2)利用10进制转base进制的方法在1)中x的基础上求U串
3)2)中出的U串的长度l很可能小于Len,则在U串前面补齐Len - l个0
4)一次输出U串元素+1即为V串
java1:
import java.util.*;
import java.io.*;import java.math.*;
import java.text.*;
public class not {
public static void main(String args[])
{
BigInteger b,x,t,tt;
int len,i,k;
Scanner cin=new Scanner(System.in);
while(cin.hasNext())
{
b=cin.nextBigInteger();
x=cin.nextBigInteger();
t=BigInteger.valueOf(1);
len=0;
while(x.compareTo(t)>=0)
{
len++;
x=x.subtract(t);
t=t.multiply(b);
}
String s="";
while(x.compareTo(BigInteger.valueOf(0))!=0)
{
tt=x.mod(b);
x=x.divide(b);
s=tt.toString()+s;
}
k=s.length();
while(k<len)
{
s="0"+s;
k++;
}
for(i=0;i<len;i++)
{
System.out.print((char)(s.charAt(i)+1));
}
System.out.println();
}
}
}
java2:
import java.util.*;
import java.io.*;
import java.math.*;
import java.text.*;
public class Main{
public static void main(String args[])
{
BigInteger b,x,t,tt;
int len,i,k;
Scanner cin=new Scanner(System.in);
while(cin.hasNext())
{
b=cin.nextBigInteger();
x=cin.nextBigInteger();
t=BigInteger.valueOf(1);
len=0;
while(x.compareTo(t)>=0)
{
len++;
x=x.subtract(t);
t=t.multiply(b);
}
String s;
s=x.toString(b.intValue());
k=s.length();
while(k<len)
{
s="0"+s;
k++;
}
for(i=0;i<len;i++)
{
System.out.print((char)(s.charAt(i)+1));
}
System.out.println();
}
}
}
总结:s="0"+s;与s=s+“0”效果不一样!!!s=tt.toString()+s;与s=s+tt.toString()效果不一样!!!
- Alternative Scale of Notation(大数java)
- POJ 1894 Alternative Scale of Notation
- POJ 1894 Alternative Scale of Notation
- POJ 1894 Alternative Scale of Notation .
- Game of Connections(大数java+Catalan数)
- PAT-1073. Scientific Notation(Java StringBuild)
- 大数相加(JAVA)
- 大数相乘(java)
- java 大数(hdu4002)
- 大数出来(java)
- 大数相乘(java)
- 大数加法(JAVA)
- Storage of Scale and Precision
- Multiple of 17(湖南省第六届ACM竞赛题)含有java大数模板
- Scale-out of the Performance of SignalR
- JAVA CHAT SCALE
- Factorial of large numbers bjfu1005 java实现大数阶乘
- SGU 481 Hero of Our Time java大数+规律
- stl_slist.h
- Android_ArrayAdapter文字排列_141002
- 将a和b交换的3种方法
- NYOJ 题目291 LK的数学题(欧拉函数)
- stl_heap.h
- Alternative Scale of Notation(大数java)
- atexit()函数使用说明
- stl_tree.h
- hdu 2255 奔小康赚大钱(二分图的最优匹配)
- 简单的MySQL数据库主从同步配置
- _exit()函数使用说明
- 法国红酒法国警方根据
- stl_set.h
- 博客暂停通知-------10.1~11.24