I. Reversion Count
Description:
There is a positive integer X, X's reversion count is Y. For example, X=123, Y=321; X=1234, Y=4321. Z=(X-Y)/9, Judge if Z is made up of only one number(0,1,2...9), don't consider '+'and '-'.
Input:
Input contains of several test cases. Each test case only contains of a number X, L is the length of X. ( 2 <= L < 100)
Output:
Output “YES”or “NO”.
样例输入
10
13
样例输出
YES
YES
做了三个小时好不容易出来结果了,他告诉我超时……
#include <stdio.h>
#include <stdlib.h>
char a[101],b[101];
int isonly(int c){
int a=c%10;
while(c){
int c2=c%10;
if(c2!=a)
return 0;
c/=10;
}
return 1;
}
int main(void)
{
int len,i,j;
int c;
for(;;){
len=0;
for(i=0;;i++){
scanf("%c",&a[i]);
if(a[i]=='\n')
break;
len++;
}
for(j=len,i=0;j>=0;j--,i++){
b[j]=a[i];
}
c=(atoi(a)-atoi(b))/9;
if(c<0)
c=-c;
if(c==0)
printf("YES\n");
else if(isonly(c))
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
下边这个是一个大佬的程序,c++
#include<iostream>
#include<algorithm>
using namespace std;
string x;
int z[100],y[100];
int len;
void turn()
{
len=0;
for(int i=x.size()-1;i>=0;--i)
{
y[i]=x[i]-'0';
z[len++]=x[i]-'0';
}
}
bool com()
{
for(int i=len-1;i>=0;--i)
if(z[i]!=y[i])
{
if(z[i]<y[i])
{
swap(z,y);
break;
}
else
break;
}
for(int i=0;i<len;++i)
{
if(z[i]<y[i])
{
z[i+1]-=1;
z[i]+=10;
z[i]-=y[i];
}
else
z[i]-=y[i];
}
--len;
while(!z[len]&&len>0)
--len;
if(len==0) return true;
for(int i=len;i>=0;--i)
{
if(z[i]>=9||z[i]==0)
{
if(i!=0) z[i-1]+=z[i]%9*10;
z[i]/=9;
}
else
{
if(i!=0) z[i-1]+=z[i]*10;
z[i]=0;
}
}
while(!z[len]&&len>0)
--len;
if(len==0) return true;
for(int i=1;i<=len;++i)
if(z[i]!=z[i-1]) return false;
return true;
}
int main()
{
while(cin>>x)
{
turn();
if(com())
cout<<"YES\n";
else
cout<<"NO\n";
}
return 0;
}