火星A+B 2006年浙江大学计算机及软件工程研究生机试真题
来源:互联网 发布:mac 输入法切换快捷键 编辑:程序博客网 时间:2024/04/29 15:36
- 题目描述:
- 读入两个不超过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,0 2,14,2,0 1,2,01 10,6,4,2,10 0
- 样例输出:
1,0,11,1,1,01,0,0,0,0,0
代码AC,欢迎参考(zoj系统这题判断退出的条件是 a和b同时为0,而题目是或,所以大家注意了,不然总是答案错误 50分,HDU和九度是尊重原题的)
#include<stdio.h>#include<math.h>#include<string.h>#include<algorithm>using namespace std;#define N 25int prime[N];void findPrime() {int i, j, n = 1;for(i=3; ; i++) {int flag = 1;for(j=2;j<=sqrt((float) i);j++) {if(i % j == 0) {flag = 0;break;}}if(flag) {prime[n] = i;if(n == N-1)break;elsen++;}}}//num:统计火星数字位数int calNum(char *s) {int i=0, num=1; while(s[i]) {if(s[i] == ',')num++;i++;}return num;}int main() {//freopen("in.txt","r",stdin);prime[0] = 2;findPrime();char s1[3*N-1], s2[3*N-1];char s[] = ",";char *result =NULL; int len1, len2, len, i;while(scanf("%s %s",s1,s2) != EOF) {//zoj系统这题判断退出的条件是 a和b同时为0,而题目是或,//所以大家在zoj上提交时,//将strcmp(s1,"0")==0 || strcmp(s2,"0")==0//改为 strcmp(s1,"0")==0 && strcmp(s2,"0")==0//不然总是答案错误 50分if(strcmp(s1,"0")==0 || strcmp(s2,"0")==0)break;int a[N]={0}, b[N]={0}, sum[N+1]={0};len1 = calNum(s1);len2 = calNum(s2);len = max(len1,len2); //在vc6.0时max改为__max,在oj提交时使用max;i=len1-1;result = strtok(s1,s);while(result != NULL) {sscanf(result,"%d",&a[i]);result = strtok(NULL,s);i--;}i=len2-1;result = strtok(s2,s);while(result != NULL) {sscanf(result,"%d",&b[i]);result = strtok(NULL,s);i--;}int tmp;for(i=0; i<len; i++) {tmp = sum[i];sum[i] = (tmp + a[i] + b[i]) % prime[i];sum[i+1] = (tmp + a[i] + b[i]) / prime[i];}i = len;if(sum[len] == 0)i--;for(; i>0; i--) {printf("%d,",sum[i]);}printf("%d",sum[i]);printf("\n");}return 0;}
0 0
- 火星A+B 2006年浙江大学计算机及软件工程研究生机试真题
- 九度题目1015:还是A+B && 2006年浙江大学计算机及软件工程研究生机试真题
- 1041: A+B--2010年浙江大学计算机及软件工程研究生机试真题
- 2010年浙江大学计算机及软件工程研究生机试真题 A+B
- 九度题目1003:A+B && 2010年浙江大学计算机及软件工程研究生机试真题
- A+B for Matrices(2011年浙江大学计算机及软件工程研究生机试真题)
- 1003 A+B(2010年浙江大学计算机及软件工程研究生机试真题)
- 题目1026:又一版 A+B(2008年浙江大学计算机及软件工程研究生机试真题)
- 题目1003:A+B 2010年浙江大学计算机及软件工程研究生机试真题
- 2006年浙江大学计算机及软件工程研究生机试真题
- 2009年浙江大学计算机及软件工程研究生机试真题
- 2008年浙江大学计算机及软件工程研究生机试真题
- 2010年浙江大学计算机及软件工程研究生机试真题
- 2007年浙江大学计算机及软件工程研究生机试真题
- 2011年浙江大学计算机及软件工程研究生机试真题
- 2011年浙江大学计算机及软件工程研究生机试真题
- 2010年浙江大学计算机及软件工程研究生机试真题
- 2005年浙江大学计算机及软件工程研究生机试真题
- 文件处理问题
- 第一章 起步
- 【C++】PAT(advanced level)1055. The World's Richest (25)*
- PAT Basic Level 1024. 科学计数法 (20)
- 今天加班,没事写篇文章
- 火星A+B 2006年浙江大学计算机及软件工程研究生机试真题
- VS2008与matlab联合调用
- Hibernate Annotations配置映射
- 黑马程序员_接口的基础常识整理
- LeetCode Recover Binary Search Tree
- ACM-KMP之Period——hdu1358
- commons fileupload 上传方法
- WIKIOI-1098 均分纸牌
- 第二周 项目二 有序的结构数组