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; }