• 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没清零,结果同一组数据,每次结果不一样
    看来,变量一定要赋初值,数组一定清空		
    		
    			
    
            
             
                
                
                
            
    
    
  • 相关阅读:
    32ES6 Map的介绍和API
    30ES6 集合介绍与API
    27ES6 Promise.prototype..then方法
    26ES6 Promise封装AJAX请求
    31ES6 集合实践
    221JavaSE 类和对象
    linux centos timer_create接口
    centos7 进入安全模式
    Python: Abstract Factory Pattern
    Python: Composite Pattern
  • 原文地址:https://www.cnblogs.com/hxsyl/p/2608173.html
Copyright © 2020-2023  润新知