Ceceliaaa 2023-04-04 17:25 采纳率: 66.7%
浏览 29
已结题

关于 回文数 16进制的问题

为什么就是过不了测试点呢QAQ

img


 #include<stdio.h> 
#include<string.h>
#include<ctype.h> 
void  niweicunchu(char *n,char *m);
int ishuiwenshu(char *h);
int main(void)
{
    char input1[130];    
    char input2[130];
    char M[130];
    char ch;
    int a,b,c,i,j,k,f;
    int N;
  
  scanf("%d",&N);
  scanf("%s",input1);
  
  niweicunchu(input1,input2);
  
 if(N<=10)
 {
     for(k=1;k<=31;k++)
     {   if(k!=1)
         {
             b=strlen(M);
             for(i=0,c=0;i<b;i++,c++) 
               {
                 input1[i]=M[c];
            }
              niweicunchu(input1,input2);    
        }
          for(j=0;j<strlen(input1);j++)
        {
            //将M数组初始化为0,防止上一次循环的影响 
            for(i=0;i<130;i++)
            M[i]='0';
              M[j]=(input1[j]+input2[j]-'0')%N;
             M[j+1]=(input1[j]+input2[j]-'0')/N;
        }
        f=ishuiwenshu(M);
        if(f)
        break;
    }
    
     if(k<31) 
      printf("STEP=%d",k);
      else
      printf("Impossible!");
    }
    
          
  if(N==16)
  {
      for(k=1;k<=31;k++)
     {
         if(k!=1)
         {
             b=strlen(M);
             for(i=0,c=0;i<b;i++,c++) 
         {
             input1[i]=M[c];
        }
              niweicunchu(input1,input2);    
        }
        
          for(j=0;j<strlen(input1);j++)
        {
            //将M数组初始化为0,防止上一次循环的影响 
            for(i=0;i<130;i++)
            M[i]='0';
            
            if(input1[j]>='a'&&input1[j]<='z'||input1[j]>='A'&&input1[j]<='Z')
            {
                ch=tolower(input1[j]);
                switch(ch)
            {
                
                case'a':input1[j]='10';
                        break;
                case'b':input1[j]='11';
                        break;
                case'c':input1[j]='12';
                        break;
                case'd':input1[j]='13';
                        break;
                case'e':input1[j]='14';
                        break;
                case'f':input1[j]='15';
                        break;
                default:break;
            }
            
            }
            if(input2[j]>='a'&&input2[j]<='z'||input2[j]>='A'&&input2[j]<='Z')
            {
                ch=tolower(input2[j]);
                switch(ch)
            {
                
                case'a':input2[j]='10';
                        break;
                case'b':input2[j]='11';
                        break;
                case'c':input2[j]='12';
                        break;
                case'd':input2[j]='13';
                        break;
                case'e':input2[j]='14';
                        break;
                case'f':input2[j]='15';
                        break;
                default:break;
            }
            }
            
        
              M[j]=(input1[j]+input2[j]-'0')%N;
             M[j+1]=(input1[j]+input2[j]-'0')/N;
        }
        f=ishuiwenshu(M);
        if(f)
        break;
    }
     if(k!=31) 
      printf("STEP=%d",k);
      else
      printf("Impossible!");
          b=strlen(M);
         for(i=0,c=0;i<b;i++,c++) 
         {
             input1[i]=M[c];
        }
      
  }
  
  
  return 0;
} 
    //在结束计算前或得到回文数前,逆位存储数字 
void  niweicunchu(char* n,char * m)
   {
        int a,b;
        int i;
        a=strlen(n);
         
        for(i=0,b=a-1;i<a;i++,b--)
          m[i]=n[b];
      }
          
//判断是否是回文数 
int ishuiwenshu(char* h)
{
    int n,i,j;
    n=strlen(h);
    for(i=0, j=n-1;i<n;i++,j--)
    {
        if(h[i]!=h[j])
        return 0;
    }
    
    return 1;
}
  • 写回答

2条回答 默认 最新

  • Dummer25 2023-04-06 16:28
    关注

    很明显,在将十六进制字符转换为数字时,应该使用对应的ASCII码值减去48(字符'0'的ASCII码)或者对应字母的ASCII码值减去55(字符'A'的ASCII码),而不是直接赋成字符形式的数字。你这得修改一下

    下面是修正后的代码:

    if(input1[j]>='a'&&input1[j]<='z'||input1[j]>='A'&&input1[j]<='Z')
    {
        ch=tolower(input1[j]);
        switch(ch)
        {
            case 'a':
                input1[j] = 10;
                break;
            case 'b':
                input1[j] = 11;
                break;
            case 'c':
                input1[j] = 12;
                break;
            case 'd':
                input1[j] = 13;
                break;
            case 'e':
                input1[j] = 14;
                break;
            case 'f':
                input1[j] = 15;
                break;
            default:
                break;
        }
    }
    if(input2[j]>='a'&&input2[j]<='z'||input2[j]>='A'&&input2[j]<='Z')
    {
        ch=tolower(input2[j]);
        switch(ch)
        {
            case 'a':
                input2[j] = 10;
                break;
            case 'b':
                input2[j] = 11;
                break;
            case 'c':
                input2[j] = 12;
                break;
            case 'd':
                input2[j] = 13;
                break;
            case 'e':
                input2[j] = 14;
                break;
            case 'f':
                input2[j] = 15;
                break;
            default:
                break;
        }
    }
    
    

    在这里,我们将字符'A'-'F'转换为10-15,以便进行后续的计算。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月16日
  • 已采纳回答 4月8日
  • 修改了问题 4月5日
  • 修改了问题 4月4日
  • 展开全部

悬赏问题

  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器