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), like Z=11,Z=111,Z=222,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)

就是一个简单的高精低精除法

#include<bits/stdc++.h>
using namespace std;
int check(char *num, char *num1)
{
    int len = strlen(num);
    for (int i = 0; i <= len-1; ++i)
    {
        if (num[i] > num1[i])
            return 1;
        else if(num[i] < num1[i])
            return 0;
    }
    return 1;
}
int sum(char *num, char *num1,int *num2)
{
    int len = strlen(num);
    for (int i = len-1,k=0; i >=0; --i,++k)
    {
        if (num[i] < num1[i])
        {
            num2[k] = num[i] - num1[i] + 10;
            num[i - 1] -= 1;

        }
        else
        {
            num2[k] = num[i] - num1[i];
        }
    }
/剪完了
   bool f=true;
   for(int i=0;i<len-1;++i)
   {
       num2[i+1]+=(num2[i]%9)*10;
       num2[i]/=9;
   }
   int now=0;
   for(int i=0;i<len-1;++i)
   {
       if(f&&num2[i]==0)continue;
       if(f){f=false; now=i;continue;}
       if(num2[i]!=num2[now])return 0;

   }
   return 1;
}


int main(void)
{

    char num[102];
    char num1[102];
    int num2[102];
    //int n1,n2;
    while (scanf("%s", num) != EOF)
    {
        //printf("%s\n", num);//
        int y = 0;
        int i = 0;
        //n2 = 0;
        int len = strlen(num);
        for (int j = len-1,k=0; j >=0; --j,++k)
        {

            num1[j] = num[k];
        }
        num1[len] = '\0';
        //for (int i = 0;i <= len - 1;++i)
        //{
        //printf("%c", num1[i]);
        //}
        //cout << "\n" << endl;
        if (check(num, num1))
        {
            if (sum(num, num1, num2))
                printf("YES\n");
            else
                printf("NO\n");
        }
        else
        {
            if (sum(num1, num, num2))
                printf("YES\n");
            else
                printf("NO\n");
        }

        getchar();


    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值