hdu-oj 1230 火星A+B

来源:互联网 发布:nginx 默认安装目录 编辑:程序博客网 时间:2024/05/03 03:23

火星A+B

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 10544    Accepted Submission(s): 3510


Problem Description

读入两个不超过25位的火星正整数A和B,计算A+B。需要注意的是:在火星上,整数不是单一进制的,第n位的进制就是第n个素数。例如:地球上的10进制数2,在火星上记为“1,0”,因为火星个位数是2进制的;地球上的10进制数38,在火星上记为“1,1,1,0”,因为火星个位数是2进制的,十位数是3进制的,百位数是5进制的,千位数是7进制的……
 Input
测试输入包含若干测试用例,每个测试用例占一行,包含两个火星正整数A和B,火星整数的相邻两位数用逗号分隔,A和B之间有一个空格间隔。当A或B为0时输入结束,相应的结果不要输出。
 Output
对每个测试用例输出1行,即火星表示法的A+B的值。
 Sample Input
1,0 2,14,2,0 1,2,01 10,6,4,2,10 0
 Sample Output
1,0,11,1,1,01,0,0,0,0,0
 
题目大意:每个‘,’代表一个进位,进制是按照素数表递增的。
解题思路:用数组保存进制数,然后利用字符串输入数据,再将每种进位保存为整型数组,因为进制不同所以两个‘,’间有可能不止一个字符,
要转换为整型数组所以要乘上10或100.
附代码:
#include <stdio.h>#include <string.h>int prime[30]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113};//进制数int temp[3]={1,10,100};//方便转换位整形int main(){   int arr[2][30];int sum[30];int MAX,m;char a[500],b[500];int i,j,k;while(scanf("%s%s",a,b)!=EOF){      if(strlen(a)==1 && strlen(b)==1)         if(a[0]=='0'&& b[0]=='0')//同时输入0表示结束            break;      memset(arr[0],0,sizeof(arr[0]));//数组清0      memset(arr[1],0,sizeof(arr[1]));      for(i=strlen(a)-1,m=0,k=0;i>=0;i--){          if(a[i]==','){             k++;m=0;//k表示第k个进制数             continue;          }          else{           m++;//表示每个进制数包含几位数           arr[0][k]=arr[0][k]+(a[i]-'0')*temp[m-1];              }                  }      k++;//为进位多留出一位      for(i=strlen(b)-1,m=0,j=0;i>=0;i--){          if(b[i]==','){             j++;m=0;             continue;          }          else{           m++;           arr[0][j]=arr[0][j]+(b[i]-'0')*temp[m-1];              }                  }      j++;      if(k>=j)MAX=k;      else MAX=j;      memset(sum,0,sizeof(sum));      for(i=0;i<MAX;i++){         sum[i]+=arr[0][i]+arr[1][i];         sum[i+1]=sum[i]/prime[i];         sum[i]=sum[i]%prime[i];            }      if(sum[MAX]!=0){//判断低位是否进位至高位      for(i=MAX;i>=1;i--)            printf("%d,",sum[i]);printf("%d\n",sum[0]);}       else{  for(i=MAX-1;i>=1;i--)printf("%d,",sum[i]);    printf("%d\n",sum[0]);}            }    return 0;} 

 
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 荣耀5c忘记密码怎么办 小米之家不退货怎么办 手机号绑定过多小米账户怎么办 耐克黑色鞋褪色怎么办 买广汽传祺7s新车有问题怎么办 华为荣耀10边框掉色了怎么办 网购商家打来无货怎么办 客户拍了不发货怎么办 天猫商家欺骗买家怎么办 阿里买家投诉我发空包怎么办 苹果6s电池坏了怎么办 hm买的单鞋脏了怎么办 微店违规屏蔽搜索怎么办 ios微信支付失效怎么办 京东第三方店铺关闭怎么办 京东店铺关门了怎么办 国美退款不到账怎么办 小米小店通过了怎么办 苹果的发票丢了怎么办 苹果7p开不开机怎么办 申请退款了怎么卖家还发货怎么办 买家申请退款卖家不退款怎么办 卖家恶意不退款怎么办 欠条到期了对方不还钱怎么办 冰箱磕了一坑怎么办 办信用卡没有家庭地址的怎么办 钱付了货没收到怎么办 在苏宁易购上买东西地址错了怎么办 手机分期付款银行卡丢了怎么办 华硕笔记本鼠标不动了怎么办 韵达快递不派送怎么办 中通快递不派送怎么办 农业银行信用卡密码输错三次怎么办 农业银行卡多次输错密码怎么办 想把店长弄走怎么办 济南银座卡过期了怎么办 银座购物卡丢失后怎么办 银座的卡丢了怎么办 银行卡换了旧卡怎么办 大理市民卡丢了怎么办 市民卡内的钱怎么办