1 条题解

  • 0
    @ 2024-5-10 0:45:59

    C :

    #include<stdio.h>
    int transfer(int m,int change)
    { 
      int a[100],j,length,low,high,key,saveM=m;
      for(j=0;m!=0;j++)
      {
        a[j]=m%change;
        m=m/change;
       }
      length=j-1;
      if(change>10)
      for(j=length;j>=0;j--)
      {
    	if(a[j]==10)
    		a[j]='A';
    	if(a[j]==11)
    		a[j]='B';
    	if(a[j]==12)
    		a[j]='C';
    	if(a[j]==13)
    		a[j]='D';
    	if(a[j]==14)
    		a[j]='E';
    	if(a[j]==15)
    		a[j]='F';
      }
      low=0;
      high=length;
      key=0;
      while(low<=high)
      {
        if(a[low]!=a[high])
    		key=1;
    	low++;high--;
      }
      if(key==0)
    	  return change;
      else
    	  return 0;
    
    
    }
    void main()
    {
     int n,c,key1,k,b[100],i,temp;
     scanf("%d",&n);
     while(n!=0)
     {
       key1=k=0;
       for(c=2;c<=16;c++)
       {
    	   temp=transfer(n,c);
        	if(temp!=0)
    		{
    			key1=1;
    			b[k]=temp;
    			k++;
    		}
        }
       if(key1==0)
         printf("Number %d is not a palindrom",n);
       else
       {
    	   printf("Number %d is palindrom in basis",n);
    	   for(i=0;i<k;i++)
    		   printf(" %d",b[i]);
       }
       printf("\n");
       scanf("%d",&n);
     }
    }
    

    C++ :

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    
    char result[1000];
    
    void base_convert(char num[],int s,int e)
    {
    	int i,flag,k,j,a[1000],b[1000];
    	for(i=0;i<strlen(num);i++)
    	{
    		if(num[i]>='A'&&num[i]<='Z')
    			a[i]=num[i]-55;
    		else if(num[i]>='a'&&num[i]<='z')
    			a[i]=num[i]-61;
    		else
    			a[i]=num[i]-48;
    	}
    	k=0;
    	while(1)
    	{
    		for(i=0;i<strlen(num);i++)
    		{
    			if(a[i]!=0&&i<strlen(num)-1)
    			{
    				a[i+1]+=(a[i]%e)*s;
    				a[i]/=e;
    			}
    			if(i==strlen(num)-1)
    			{
    				b[k++]=a[i]%e;
    				a[i]/=e;
    			}
    		}
    		flag=0;
    		for(i=0;i<strlen(num);i++)
    			if(a[i]!=0)
    				flag=1;
    		if(!flag)
    			break;
    	}
    	for(j=0,i=k-1;i>=0;i--)
    	{
    		if(b[i]>=10&&b[i]<=35)
    			result[j++]=b[i]+55;
    		else if(b[i]>=36&&b[i]<=61)
    			result[j++]=b[i]+61;
    		else
    			result[j++]=b[i]+48;
    	}
    	result[j]='\0';
    }
    
    int main()
    {
    	char s[1000],t[1000];
    	int i,flag,v[17];
    	while(scanf("%s",s)!=EOF,s[0]!='0')
    	{
    		memset(v,0,sizeof(v));
    		for(flag=0,i=2;i<=16;i++)
    		{
    			if(i!=10)
    				base_convert(s,10,i);
    			else
    				strcpy(result,s);
    			strcpy(t,result);
    			reverse(result,result+strlen(result));
    			if(!strcmp(t,result))
    			{
    				flag=1;
    				v[i]=1;
    			}
    		}
    		if(flag)
    		{
    			printf("Number %s is palindrom in basis",s);
    			for(i=2;i<=16;i++)
    				if(v[i])
    					printf(" %d",i);
    			puts("");
    		}
    		else
    			printf("Number %s is not a palindrom\n",s);
    	}
    	return 0;
    }
    

    Pascal :

    var n,i,j,m,k,w,t,e:longint;
        a,b:array[1..1000000] of longint;
    
    begin
      readln(n);
      while n<>0 do
        begin
          fillchar(b,sizeof(b),0); w:=0;
          for k:= 2 to 16 do
            begin
              fillchar(a,sizeof(a),0);
              m:=n;i:=0;
              while m<>0 do
                begin
                 inc(i);
                 a[i]:=m mod k;
                 m:=m div k
                end;
             t:=0;
            for j:=1 to i div 2 do
              if a[j]<>a[i+1-j] then begin t:=1;break;end;
    
            if t=0 then begin inc(w);b[w]:=k;end;
           end;
    
          if w=0 then writeln('Number ',n,' is not a palindrom')
              else
                begin
                  write('Number ',n,' is palindrom in basis');
                  for e:=1 to w do write(' ',b[e]);
                  writeln;
                end;
          readln(n);
        end;
    end.
    

    Java :

    
    import java.awt.List;
    import java.util.ArrayList;
    import java.util.Scanner;
    
    public class Main {
    	public static boolean isPalindrom(String str){
    		int i=0,j=str.length()-1;
    		while (i<j){
    			if (str.charAt(i)!=str.charAt(j)) {
    				return false;
    			}
    			i++;j--;
    		}
    		return true;
    	}
    	public static void main(String[] args) {
    		Scanner cin=new Scanner(System.in);
    		while (cin.hasNext()){
    			int n=cin.nextInt();
    			if (n==0) {
    				break;
    			}
    			boolean first=true,flag=true;
    			for (int i = 2; i < 17; i++) {
    				String str=Integer.toString(n, i);
    				if (isPalindrom(str)) {
    					flag=false;
    					if (first) {
    						first=!first;
    						System.out.print("Number ");System.out.print(n);System.out.print(" is palindrom in basis ");
    						System.out.print(i);
    					}else {
    						System.out.print(" ");System.out.print(i);
    					}
    				}
    			}
    			if (flag) {
    				System.out.print("Number ");System.out.print(n);System.out.print(" is not a palindrom");
    			}
    			System.out.println();
    			
    		}
    	}
    
    }
    
    

    Python :

    import string
    def baseconvert(n, base):
      digits = string.digits + string.ascii_lowercase
      res = ""
      while n:
        n, mod = divmod(n, base)
        res += digits[mod]
      return res
    def judge(s):
      return s == s[::-1]
    while True:
      n = input()
      if n == 0:
        break
      ans = []
      for i in xrange(2,17):
        if judge(baseconvert(n,i)):
          ans.append(str(i))
      if ans:
        print "Number %d is palindrom in basis %s" %(n, ' '.join(ans))
      else:
        print "Number %d is not a palindrom" %(n)
    
    • 1

    信息

    ID
    6268
    时间
    1000ms
    内存
    32MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者