当前位置:编程学习 > C/C++ >>

hdu 1230(火星A+B,进制)

 


/*

 

 

 

个人感觉如果进制转换的话太麻烦,直接模拟加法,不同位数采用不同的进制加法。。。

/但是还是WA了两次,没有处理好余数的问题,当不能进位时。

 


2013-04-23


*/

 

 

[cpp]
#include"stdio.h"  
#include"string.h"  
#include"math.h"  
int prime[25],cnt; 
void fun() 

    int i,j,k,f; 
    cnt=2; 
    prime[0]=2; 
    prime[1]=3; 
    for(i=4;i<=1000;i++) 
    { 
        f=1; 
        k=(int)sqrt(i); 
        for(j=2;j<=k;j++) 
        { 
            if(i%j==0) 
            { 
                f=0;break; 
            } 
        } 
        if(f)prime[cnt++]=i; 
        if(cnt==25)break; 
    } 

         
int main() 

    int l1,l2; 
    int i,j,k; 
    int t1,t2,t; 
    int a[26],b[26],c[26]; 
    char s1[101],s2[101]; 
    fun(); 
    while(scanf("%s %s",s1,s2)==2) 
    { 
        if(strcmp(s1,"0")==0||strcmp(s2,"0")==0)break; 
         
        l1=strlen(s1); 
        l2=strlen(s2); 
 
        //为后面处理最后一位的数做准备  
        s1[l1]=',',s1[++l1]=0; 
        s2[l2]=',',s2[++l2]=0; 
 
 
        memset(a,0,sizeof(a)); 
        memset(b,0,sizeof(b)); 
 
 
        //A  
        t1=0; 
        t=0; 
        for(i=0;s1[i];i++) 
        { 
            if(s1[i]==',') 
            { 
                a[t1++]=t; 
                t=0; 
            } 
            else if(s1[i]>='0'&&s1[i]<='9') 
            { 
                t=t*10+s1[i]-'0'; 
            } 
        } 
        //需要逆置一下。。  
        for(i=0,j=t1-1;i<j;i++,j--) 
        { 
            t=a[i]; 
            a[i]=a[j]; 
            a[j]=t; 
        } 
 
 
        //B  
        t2=0; 
        t=0; 
        for(i=0;s2[i];i++) 
        { 
            if(s2[i]==',') 
            { 
                b[t2++]=t; 
                t=0; 
            } 
            else if(s2[i]>='0'&&s2[i]<='9') 
            { 
                t=t*10+s2[i]-'0'; 
            } 
        } 
        for(i=0,j=t2-1;i<j;i++,j--) 
        { 
            t=b[i]; 
            b[i]=b[j]; 
            b[j]=t; 
        } 
         
 
        memset(c,0,sizeof(c)); 
        i=0; 
        int carry; 
        carry=0; 
        while(i<t1||i<t2) 
        { 
            t=a[i]+b[i]; 
            t+=carry; 
            if(t>=prime[i]) 
            { 
             
                c[i]=t%prime[i]; 
                carry=t/prime[i]; 
            } 
            else 
            { 
   &

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,