题目大意:
就是求一个比X大的数,要求各个位之和是10的倍数。应把每位的数相加。
对此以无力吐槽,就一个高精度,就能A掉。
代码:
#include <algorithm>#include <iostream>#include <cstring>#include <cstdlib>#include <vector>#include <queue>#include <cstdio>#include <cmath>#include <string>#include <stack>#include <cctype>using namespace std;void Add(char *str1, char *str2, char *str3){ // str3 = str1 + str2; int i, j, i1, i2, tmp, carry; int len1 = strlen(str1), len2 = strlen(str2); char ch; i1 = len1-1; i2 = len2-1; j = carry = 0; for( ; i1 >= 0 && i2 >= 0; ++j, --i1, --i2 ) { tmp = str1[i1]-'0'+str2[i2]-'0'+carry; carry = tmp/10; str3[j] = tmp%10+'0'; } while( i1 >= 0 ) { tmp = str1[i1--]-'0'+carry; carry = tmp/10; str3[j++] = tmp%10+'0'; } while( i2 >= 0 ) { tmp = str2[i2--]-'0'+carry; carry = tmp/10; str3[j++] = tmp%10+'0'; } if( carry ) str3[j++] = carry+'0'; str3[j] = '\0'; for( i=0, --j; i < j; ++i, --j ) { ch = str3[i]; str3[i] = str3[j]; str3[j] = ch; }}char a[100005];char b[100005];int main(){ int t; __int64 sum; scanf("%d",&t); while(t--) { sum=0; scanf("%s",a); while(1) { sum=0; Add(a,"1",b); strcpy(a,b); int len=strlen(b); for(int kk=0;kk<len;kk++) sum+=b[kk]-'0'; if(sum%10==0) break; } printf("%s\n",b); } return 0;}