| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1508 人关注过本帖
标题:求助!!关于程序纠错 NOIP1999的回文数
取消只看楼主 加入收藏
zwh2530
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2013-5-15
结帖率:0
收藏
已结贴  问题点数:20 回复次数:1 
求助!!关于程序纠错 NOIP1999的回文数
试题来源
  NOIP1999 提高组
问题描述
  若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。
  例如:给定一个10进制数56,将56加65(即把56从右向左读),得到121是一个回文数。
  又如:对于10进制数87:
  STEP1:87+78 = 165 STEP2:165+561 = 726
  STEP3:726+627 = 1353 STEP4:1353+3531 = 4884
  在这里的一步是指进行了一次N进制的加法,上例最少用了4步得到回文数4884。
  写一个程序,给定一个N(2<=N<=10或N=16)进制数M(其中16进制数字为0-9与A-F),求最少经过几步可以得到回文数。
  如果在30步以内(包含30步)不可能得到回文数,则输出“Impossible!”
输入格式
  两行,N与M
输出格式
  如果能在30步以内得到回文数,输出“STEP=xx”(不含引号),其中xx是步数;否则输出一行”Impossible!”(不含引号)
样例输入
9
87
样例输出
STEP=6

特别奇怪为什么总有一组测试数据,无法通过,而我试了多组数据,结果都没有错。。。无法明白原因所以求助

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
int p;
char s[1000];
int  c[1000];
void fx()
{ int a;
  int i;
  int k=strlen(s);
  c[0]=0 ;
  if(p!=16)
 { for(i=0;i<k;i++)
   {a=s[i]+s[k-i-1]-2*'0';
    c[i+1]=a;
   }
   for(i=k;i>=1;i--)
   {if (c[i]>=p)
     {  c[i-1]+=c[i]/p;
       c[i]=c[i]%p;
     }
   }
   if(c[0]!=0)
   {for(i=0;i<=k;i++)
    {s[i]=c[i]+'0';}
   }
   else
    {
     for(i=0;i<k;i++)
      {s[i]=c[i+1]+'0';}
    }

 }
else
{
for(i=0;i<k;i++)
   {a=s[i]+s[k-i-1]-2*'0';
    c[i+1]=a;
   }
   for(i=k;i>=1;i--)
   {
if (c[i]>=p)
     {  c[i-1]+=c[i]/p;
       c[i]=c[i]%p;
     }
   }
   if(c[0]!=0)
   {for(i=0;i<=k;i++)
    {if(c[i]>=10)
 {s[i]=c[i]-10+'A';}
 else
 {s[i]=c[i]+'0';}
    }
   }
   else
   {
     for(i=0;i<k;i++)
      {
      if(c[i+1]>=10)
 {s[i]=c[i+1]-10+'A';}
 else
 {s[i]=c[i+1]+'0';}
      }
   }
}
}
bool hw()
{   int i;
int k=strlen(s);
for(i=0;i<k;i++)
  {if (s[i]!=s[k-1-i])
    return 0;
  }
   return 1;
}
int main()
{ int i;
 for(i=0;i<1000;i++)
  {c[i]=0;}
 scanf("%d",&p);
 scanf("%s",s);
 int l=strlen(s);
 if(p==16)
 {for(i=0;i<l;i++)
  {if(s[i]>='A' &&s[i]<='F')
    s[i]='0'+s[i]-'A'+10;

  }
 }
 int k=0;
 while(!hw())
 {fx();k++;if(k>30) {break;}}
 if(k<=30)
 {printf("STEP=%d",k);}
 else
 {printf("Impossible!");}
 system("pause");
 return 0;
}
2013-05-15 18:04
zwh2530
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2013-5-15
收藏
得分:0 
回复 2楼 apull
嗯,我见过相关的回文数的程序,当然也查过这道题的答案,可以我却一直找不到我的程序错在哪里,因为我试了很多组数据都是对了,所以来求助。
2013-05-15 19:48
快速回复:求助!!关于程序纠错 NOIP1999的回文数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023009 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved