高精度题的思路是把数据存于数组进行处理,其个别题型在Java语言中可以使用BigInteger BigDecimal 进行处理。
C语言解决这题型时一般采用将数组的数据长度存放在A[0]头元素,Java也可。

此处是使用传统的数组解题,数组长度单独存放在cur变量中:
因为是n进制所以把
当前位规范从A[i]%10 到 A[i]%n
进位规范从A[i]/10 改成 A[i]/n

  1. import java.util.Scanner;
  2. public class Main {
  3. public static void main(String[] args){
  4. Scanner sc=new Scanner(System.in);
  5. int n=sc.nextInt();
  6. String str=sc.next(); //字符串接收输入
  7. int[] a=new int[1000000];
  8. int[] b=new int[1000000];
  9. int cur=str.length(); //此时数据长度为str长
  10. for(int i=0;i<str.length();i++){ //存放入int数组
  11. if(str.charAt(i)>='0' && str.charAt(i)<='9') a[i]=str.charAt(i)-'0';
  12. else if(str.charAt(i)>='A' && str.charAt(i)<='Z') a[i]=str.charAt(i)-'A'+10;
  13. else a[i]=str.charAt(i)-'a'+10; //90%正确的是因为未考虑小写字母的情况。。。。
  14. }
  15. int ans=0;
  16. while(true){
  17. if(ans>30){ //加法超过30次,则退出
  18. System.out.println("Impossible");
  19. break;
  20. }
  21. else{
  22. if(huiwen(a,cur)){ //判断是否回文
  23. System.out.println(ans);
  24. break;
  25. }
  26. //高精度加法模板
  27. for(int i=0;i<cur;i++) b[i]=a[cur-i-1];//
  28. for(int i=0;i<cur;i++) a[i]+=b[i];//
  29. for(int i=0;i<cur;i++){ //
  30. a[i+1]+=a[i]/n; //
  31. a[i]%=n; //
  32. } //
  33. if(a[cur]>0) cur++; //(如果最高位有进位,数据长加1)
  34. ans++;
  35. }
  36. }
  37. }
  38. static boolean huiwen(int[] a,int cur){
  39. for(int i=0;i<cur;i++)
  40. if(a[i]!=a[cur-i-1])
  41. return false;
  42. return true;
  43. }
  44. }
点赞(0)
 

7.3 分

2 人评分

 

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论