HDOJ 1230(火星A+B)

火星A+B

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

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,1 4,2,0 1,2,0 1 10,6,4,2,1 0 0

 

 

Sample Output

1,0,1 1,1,1,0 1,0,0,0,0,0

/*
  Name: 火星A+B
  Copyright:
  Author: 火星十一郎
  Date: 25-07-25 08:14
  Description:
*/
/*long long的十进制为20位*/
#include<stdio.h>
#include<string.h>
#include<math.h>
/*
不必用素数定理也可估算出1到n的素数个数小于n/2
因为至少去掉所有 偶数,或者开平方 找到可能的最大素数
*/
#define N 10000
int vis[N],prim[26],ans[30];//全局数组自动赋值为0
int k1,k2;
void is_prim()//不能与数组名同名
{
	int m=(int)sqrt(N+0.5);
	int c=0,i,j;
	memset(vis,0,sizeof(vis));
	for(i=2;i<=m;i++)
	if(!vis[i])
	{
		prim[c++]=i;
		//printf("%d\n",prim[0]);
		for(j=i*i;j<=N;j+=i)
			vis[j]=1;
	}
}
void add_output(int *temp1,int *temp2)
{
	int i,j;
	int len=k1>k2?k1:k2;
	memset(ans,0,sizeof(ans));
	//printf("%d\n",len);
	for(i=0,j=0;i<len;i++)
	{
		ans[i]+=temp1[i]+temp2[i];
		if(ans[j]>=prim[i])
		{
			ans[i+1]+= ans[i]/prim[i];
			ans[i]%=prim[i];
			//printf("%d\n",prim[i]);
			j++;
		}
		else
			j++;
	/*
	刚开始没加else
	代码不对,因为若执行了if里的j++;则有继续执行了for循环体里的j++
	*/
	}
	if(ans[len]!=0)
		len++;
	for(i=len-1;i>=1;i--)
		printf("%d,",ans[i]);
	printf("%d\n",ans[0]);
}
int main()
{
    char str1[100],str2[100];
	int temp1[100]={0},temp2[100]={0};
    int i,j; int temp,len1,len2;
    is_prim();
    prim[0]=2;
    /*
    for(i=0;i<26;i++)
    	printf("%d ",prim[i]);
    printf("\n");
    /*测试后发现,N值太小(125)
    改过后 prim[0]=1;
	所以必须加上prim[0]=2;
	*/
    while(1)
    {
		memset(str1,0,sizeof(str1));
		memset(str2,0,sizeof(str2));
		memset(temp1,0,sizeof(temp1));
		memset(temp2,0,sizeof(temp2));
        scanf("%s %s",str1,str2);
        k1=k2=0;
        if(str1[0]=='0'&&str2[0]=='0')
            break;
        len1=strlen(str1);
        len2=strlen(str2);
        //为防止最后一个字符未被转化为整形
        str1[len1]=',';
		str2[len2]=',';
		len1++;
		len2++;
		 //转化为整形
        for(i=0,temp=0,k1=0;i<=len1;i++)
        {
			if(str1[i]==',')
			{
				temp1[k1++]=temp;
				temp=0;
				continue;
			}
			temp=temp*10+str1[i]-'0';
		}
		for(i=0,temp=0,k2=0;i<=len2;i++)
        {
			if(str2[i]==',')
			{
				temp2[k2++]=temp;
				temp=0;
				continue;
			}
			temp=temp*10+str2[i]-'0';
		}
        //for(i=0;str1[i]!='\0';i++)
        //逆置 ,j<len1-1不能加等号,因为最后人为加了逗号
        for(i=0,j=k1-1;j>=i;i++,j--)
        {
      		temp=temp1[j];//temp需要时char
            temp1[j]=temp1[i];
            temp1[i]=temp;
        }
      	for(i=0,j=k2-1;j>=i;i++,j--)//逆置
        {
      		temp=temp2[j];
            temp2[j]=temp2[i];
            temp2[i]=temp;
        }
		add_output(temp1,temp2);
	}
	return 0;
}

做这道题时,原来两个temp没清零,结果同一组数据,每次结果不一样
看来,变量一定要赋初值,数组一定清空		

 

时间: 2024-09-20 05:26:13

HDOJ 1230(火星A+B)的相关文章

HDU 1230 火星A+B

火星A+B Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 9859    Accepted Submission(s): 3251 Problem Description 读入两个不超过25位的火星正整数A和B,计算A+B.需要注意的是:在火星上,整数不是单一进制的,第n位的进制就是第n个素数.例如:地球上的10进制数2,在火星上记为

火星WiFi经常掉线的解决方法

  目前,很多网友都会下载一些WiFi热点共享软件来使用.其中,火星WiFi就是很多网友都在使用的WiFi热点共享软件.不过,一些网友在使用火星WiFi的过程中,遇到了火星WiFi经常掉线的状况.那么,火星WiFi经常掉线该怎么办呢?下面,就一起来看看今天的火星WiFi使用教程吧! 火星WiFi 火星WiFi是一款最好免费WiFi热点共享软件,安装在电脑后可以快速使电脑变成无线WiFi共享点,手机.IPAD.免费高速上网.基于电脑无线网卡,瞬间让电脑变身免费WiFi热点.安装火星WiFi,无需额

苹果-地球坐标系 转 火星坐标系之间误差怎么降低

问题描述 地球坐标系 转 火星坐标系之间误差怎么降低 我在用苹果的MKMapView获取的坐标转换为 火星坐标之间产生误差很大,求大神指点:

火星文,和尚摸得,90后就摸不得?

人怕出名猪怕壮,此言不虚.这两天为这事儿郁闷的,就要数90后了. 本来小孩子搞发明,那是抢着夺着的香饽饽,突然不香了,并遭来骂声一片.已经举起来的手马上由拍巴掌欢迎的姿势改成了左右晃动,"no,no,please!不要!" 对,就是说的90后发明了火星文这码子事. 先来看一段让人头皮发麻的文字."99,3Qu姑力偶读猪,偶会+Ud.挖喜番u,很U感j,u41g棒,7看C麻?CU29!"这不是中国话,也不是英国话,更不是阿拉伯语.这就是传说中的"火星文&qu

Word中如何输入特殊符号和火星文

随着网络语言的流行,我们在办公中也会接触很多"火星文"和生僻字,用这些文字交流虽然很有趣,但是在输入上却显得非常麻烦,其实不必为此纠结,现在直接使用Word三步即可搞定. Step01 随着网络语言的流行,我们在办公中也会接触很多"火星文"和生僻字,用这些文字交流虽然很有趣,但是在输入上却显得非常麻烦,其实不必为此纠结,现在直接使用Word三步即可搞定. Step02用鼠标左键选住该字体,再在工具栏中选择"符号",在弹出的窗口中,字体选择&quo

博帝火星PEP25128500EL(512M/DDR21066)内存性能参数

型号 火星PEP25128500EL(512M/DDR2 1066) 适用类型 台式机 内存类型 DDR II 内存容量 512M 插脚数目 240pin 性能参数 内存主频 DDR2 1066 颗粒封装 BGA 其它参数 包装 盒装 保修服务 伟仕电脑全国终身定保

火星文输入法教你玩转文字游戏

文字输入是网络交流的最基本方式,无论是聊天.逛论坛还是玩游戏.发表网文等,多数情况都必须通过文字来实现.相信太多人都跟小编一样,网龄多年却依然在重复着一层不变的简体文字输入的交流方式.其实偶们早该换些新鲜花样,对文字输入进行改革了.所以,今天亲们就抛开墨守成规的打字方法,和小编一起用火星文输入法玩玩文字游戏吧! 1.新增超可爱韩国小狗皮肤 打字也有好心情 在使用火星文输入法之前,小编建议亲们先给输入法浮动窗口换一款自己喜欢的皮肤.正所谓"人靠衣装",打字时也能看到自己喜欢的皮肤,能让人

火星WIFI掉线怎么办?

  火星WIFI掉线怎么办?现在,很多人都在使用火星WiFi.安装火星WiFi,无需额外购买无线路由器,从头到尾不掏1分钱,真正的免费无线路由器.不过,有用户在反映,火星WIFI掉线怎么办?一起来看看解决火星WIFI掉线小技巧吧. 火星WIFI 从安下软件站下载安装火星WiFi,即可自动创建WiFi热点.或者手动输入WiFi名和密码,点击开启.开启火星WIFI如果失败,请点击更新无线网卡驱动. 火星WIFI 在手机"设置"中,打开"WLAN"(苹果手机打开"

火星文闪字 让QQ聊天动起来

  学生族也好,上班族也好,现在大家的电脑中都少不了QQ吧!但很遗憾QQ聊天时只能输入静态文字,就算下载个闪字包,也有很多字是无法显示的,不知道大家是不是也遇到过这种囧况呢?如果你想告别呆板,不妨来看看小编我是如何让QQ聊天动起来的. 图1 一.动态闪字 聊天很简单 小编使用的是火星文输入法V2.8.7最新版本,新增的"闪字"功能可以直接在QQ上打出动态文字.如果你还是使用老版本,那真OUT啦!这个使用方法也很简单,选择我们常用的输入法如搜狗拼音,然后切换火星文输入法到"闪&