题目描述:
    读入两个不超过25位的火星正整数A和B,计算A+B。需要注意的是:在火星上,整数不是单一进制的,第n位的进制就是第n个素数。例如:地球上的10进制数2,在火星上记为“1,0”,因为火星个位数是2进制的;地球上的10进制数38,在火星上记为“1,1,1,0”,因为火星个位数是2进制的,十位数是3进制的,百位数是5进制的,千位数是7进制的……
输入:
    测试输入包含若干测试用例,每个测试用例占一行,包含两个火星正整数A和B,火星整数的相邻两位数用逗号分隔,A和B之间有一个空格间隔。当A或B为0时输入结束,相应的结果不要输出。
输出:
    对每个测试用例输出1行,即火星表示法的A+B的值。
样例输入:
  1. 1,0 2,1
  2. 4,2,0 1,2,0
  3. 1 10,6,4,2,1
  4. 0 0
样例输出:
  1. 1,0,1
  2. 1,1,1,0
  3. 1,0,0,0,0,0
  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4. using namespace std;
  5. const int MAXN=;
  6. bool isPrime[MAXN];
  7. int prime[MAXN],cnt;
  8. void sieve()
  9. {
  10. memset(isPrime,true,sizeof(isPrime));
  11. for(int i=;i<=;i++)
  12. {
  13. if(isPrime[i])
  14. {
  15. prime[cnt++]=i;
  16. for(int j=i+i;j<=;j+=i)
  17. isPrime[j]=false;
  18. }
  19. }
  20. }
  21. char sa[MAXN];
  22. char sb[MAXN];
  23. struct BigInt{
  24. int e[MAXN];
  25. int len;
  26. BigInt()
  27. {
  28. memset(e,,sizeof(e));
  29. len=;
  30. }
  31. BigInt(const char s[])
  32. {
  33. memset(e,,sizeof(e));
  34. len=;
  35. int l=strlen(s);
  36. int z=;
  37. for(int i=;i<l;i++)
  38. {
  39. if(s[i]==',')
  40. {
  41. e[len++]=z;
  42. z=;
  43. }
  44. else
  45. {
  46. z*=;
  47. z=z+(s[i]-'');
  48. }
  49. }
  50. e[len++]=z;
  51. for(int i=;i<len/;i++)
  52. {
  53. int t=e[i];
  54. e[i]=e[len-i-];
  55. e[len-i-]=t;
  56. }
  57.  
  58. }
  59. BigInt operator+(const BigInt &t)const
  60. {
  61. BigInt res;
  62. res.len=max(len,t.len);
  63. int up=;
  64. int i;
  65. for(i=;i<res.len;i++)
  66. {
  67. int z=e[i]+t.e[i]+up;
  68. res.e[i]=z%prime[i];
  69. up=z/prime[i];
  70. }
  71. while(up!=)
  72. {
  73. res.e[res.len++]=up%prime[i];
  74. up/=prime[i];
  75. i++;
  76. }
  77. return res;
  78. }
  79. void print()
  80. {
  81. for(int i=len-;i>=;i--)
  82. {
  83. printf("%d,",e[i]);
  84. }
  85. printf("%d\n",e[]);
  86. }
  87. };
  88. int main()
  89. {
  90. sieve();
  91. while(scanf("%s %s",sa,sb)!=EOF)
  92. {
  93. BigInt a(sa);
  94. BigInt b(sb);
  95. if((a.len==&&a.e[]==)||(b.len==&&b.e[]==))
  96. break;
  97. BigInt res;
  98. res=a+b;
  99. res.print();
  100. }
  101. return ;
  102. }
  103. /**************************************************************
  104. Problem: 1016
  105. User: baneHunter
  106. Language: C++
  107. Result: Accepted
  108. Time:10 ms
  109. Memory:1028 kb
  110. ****************************************************************/

2006浙大火星A+B的更多相关文章

  1. google浙大招聘笔试题 师兄只能帮你到这儿了

    google浙大招聘笔试题 一.单选1.80x86中,十进制数-3用16位二进制数表示为?00100002.假定符号-.*.$分别代表减法.乘法和指数运算,且 1)三个运算符优先级顺序是:-最高,*其 ...

  2. 九度OJ 1016:火星A+B (进制转换)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4913 解决:1334 题目描述:     读入两个不超过25位的火星正整数A和B,计算A+B.需要注意的是:在火星上,整数不是单一进制的, ...

  3. 火星坐标、百度坐标、WGS-84坐标相互转换及墨卡托投影坐标转经纬度JavaScript版

    火星坐标 火星坐标是国家测绘局为了国家安全在原始坐标的基础上进行偏移得到的坐标,基本国内的电子地图.导航设备都是采用的这一坐标系或在这一坐标的基础上进行二次加密得到的.火星坐标的真实名称应该是GCJ- ...

  4. PAT 1044. 火星数字(20)

    火星人是以13进制计数的: 地球人的0被火星人称为tret. 地球人数字1到12的火星文分别为:jan, feb, mar, apr, may, jun, jly, aug, sep, oct, no ...

  5. BZOJ 2006: [NOI2010]超级钢琴

    2006: [NOI2010]超级钢琴 Time Limit: 20 Sec  Memory Limit: 552 MBSubmit: 2613  Solved: 1297[Submit][Statu ...

  6. Python爬虫学习(8):浙大软院网络登陆保持

    在浏览器的验证窗口中输入登陆名和密码后,成功后会弹出一个小的新窗口,如果不小心关闭了这个窗口,则就会无法联网.如果说我在一个不带有桌面的Linux系统中,我是不能够通过浏览器接入网络的,虽然提供了不同 ...

  7. [转]iOS开发中的火星坐标系及各种坐标系转换算法

     iOS开发中的火星坐标系及各种坐标系转换算法 源:https://my.oschina.net/u/2607703/blog/619183   其原理是这样的:保密局开发了一个系统,能将实际的坐标转 ...

  8. #Deep Learning回顾#之2006年的Science Paper

    大家都清楚神经网络在上个世纪七八十年代是着实火过一回的,尤其是后向传播BP算法出来之后,但90年代后被SVM之类抢了风头,再后来大家更熟悉的是SVM.AdaBoost.随机森林.GBDT.LR.FTR ...

  9. 在VPS上搭建SS访问火星

    前段时间发布了Visual Studio 2017 RC,由于现在VS没有离线的ISO了,只有一个在线安装文件.虽然可以通过这个在线安装文件生成完整的离线安装包(之前的ISO版本在安装过程中仍然需要联 ...

随机推荐

  1. Image Recognition

    https://www.tensorflow.org/tutorials/image_recognition

  2. 6.让ORM映射执行的时候打印SQL语句

    配置Django日志:\hello_django\hello_django\settings.py 文件中的 LOGGING 加入如下配置: LOGGING = { 'version': 1, 'di ...

  3. Bootstrap 轮播图(Carousel)插件

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. Web Service概念辨析

    Web Service包含两个概念. 其一是Web Service标准体系,由SOAP.WSDL.UDDI三要素组成,是平台和语言无关的.在这个概念里和WCF做比较是错误的,因为前者是行业标准,后者是 ...

  5. linux 如何查找命令的路径

    linux 下,我们常使用 cd ,grep,vi 等命令,有时候我们要查到这些命令所在的位置,如何做呢? linux下有2个命令可完成该功能:which ,whereis which 用来查看当 前 ...

  6. 隐藏c语言烦人的{ }

    .vimrc文件中添加 autocmd BufNewFile,BufRead * :syn match braces conceal "[{}]" set conceallevel ...

  7. 每天一个Linux命令(32)date命令

          date命令是显示或设置系统时间与日期.        (1)用法:       用法:  date [选项]  [参数]       (2)功能:       功能:  根据指定格式显示 ...

  8. 每天一个Linux命令(14)head命令

    head命令用于显示文件的开头的内容.在默认情况下,head命令显示文件的头10行内容.    如果指定了多于一个文件,在每一段输出前会给出文件名作为文件头. 如果不指定文件,或者文件为"- ...

  9. nodejs之入门

    一.安装: 去官网下载稳定版本,安装即可. 安装后执行node -v,显示node版本,然后输入node回车,然后输出console.log(111);,正常输出即可. 二.入门介绍: 1.nodej ...

  10. 【Flask】下载多个文件

    使用zipfile模块可以将多个文件打包成zip文件进行下载,但是常规的操作方式会在服务器磁盘上生成一个zip文件占用磁盘空间. 后引入BytesIO将文件写入到内存中然后下载: def dl_pla ...